خلاصه مطالب gulp

پرسیده شده
فعالیت 1242 روز پیش
دیده شده 626 بار
5

چرا از task Runner  ها مثل gulp.js و  webpack.js میایم و استفاده میکنیم ؟؟

 

هنگامی که ما میایم و یک پروژه رو توسعه میدهیم وقتی این پروژه هی بزرگ و بزرگ تر میشود قبل از این که کد های ما به نسخه ی production یا همان محصول نهایی امان اضافه بشود نیاز داریم که یکسری عملیات های تکراری رو هی روی کد هامون انجام بدهیم مثل minify  کردن کد های css  و یا کم کردن حجم  عکس ها حال برای جلوگیری از انجام این گونه کار های تکراری و مدیریت در زمان پروژه باید بیایم و از taskRunner ها استفاده بکنیم 

 

تعریف taskRunner  یک سری ابزار برای مدیریت وظایف هستند که میان و یکسری کار های تکراری که ما در داخل پروژه انجام میدهیم رو بر عهده میگیرند و امجام میدهند

 

 

پوشه بندی ها 

 

ما در توسعه ی یک محصول دو تا مبحث مهم داریم  یکی Production  که محصول نهایی ما هستش و در اختیار کاربرامون قرار میگیرد و دومی هم develop هستش  که نسخه ی در حال توسعه ام هستش و ما در این مرحله باید بیایم و از taskRunner  ها استفاده بکنیم پوشه بندی در این مرحله این شکلی هستش که ما در داخل root پروژه امون یک پوشه با نام src  داریم که فایل های در حال توسعه و خام امون در این پوشه قرار میگیرد و یک پوشه با نام build  که کامپایل شده یا فایل های نهایی کدهامون در این مرحله قرار میگیرد که تبدیل شده های پوشه src امون هستش و محتوای این پوشه قراره به نسخه ی production اضافه شود

 

 

نکته : webpack یک module bundler  هستش که برای دسته بندی مجموعه از فایل های جاوااسکریپتی استفاده می شود  و بیشتر برای پروژه های بزرگ استفاده میشود و شبیه به gulp  هستش ولی بیشتر کاراش باندل کردن هستش 

 

 

ما برای نصب gulp  باید اون رو هم به صورت سراسری در سیستم امون نصب کنیم  و همم درد داخل پروژه ای که ازش میخاهیم استفاده بکنیم 

 

نکته : برای استفاده از gulp ما باید در ابتدا  node  رو نصب کنیم و بهترین نسخه برای هماهنگی با gulp نسخه ی 8 اون هستش 

 

1 - نصب به صورت سراسری در داخل سیستم  امون      npm  install --global gulp-cli 

 

نکته ما با استفاده از دستور mkdir  میتوانیم در داخل cmd امان بیایم و یک دایرکتوری بسازیم همچنین ما میتوانیم با استفاده از دستور code .   بیایم و در داخل  کامنت  vscode  امون پوشه امون رو باز کنیم

 

نکته : ما مدیریت پوشه بندی مون باید بهینه تر کنیم برای همین باید یک پوشه جداکانه به نام dist  درست کنیم و یک بار src   که اون دیست فایل های پروژه نهایی ما هستش که تحویل کار فرما می شود

 

 

2- موقعی که ما میخاهیم و بیایم و از gulp استفاده بکنیم باید بیایم و اون رو در قسمت root  پروژه مون npm init  رو انجام بدهیم که میاد و برای ما یک فایل package.json  درست میکند که در داخل آن تمام پکیج هایی که ما با استفاده از آن ها میایم و با gulp کار می کنیم رو در این جا برامون لیست اش میکند

 

 

3- برای نصب gulp  هم باید در  قسمت root  پروژه امون از دستور زیر استفاده بکنیم    npm install --save-dev gulp 

که بعد از نصب یک پوشه ی node_modules  برای ما اضافه میکند 

 

 

4- حال میایم و در داخل root  پروژه امون یک فایل با نام gulpfile.js درست میکنیم  و تمام تسک هایی که مینویسیم در داخل آن هستش و در داخل این فایل ما هر پکیجی رو که نصب میکنیم باید در این فایل بیاد و معرفی بشود

 

 

استفاده از gulp 

 

ما هر پروژه ای که میایم و نصب میکنیم باید بیایم و در فایل gulpfile.js  استفاده کنیم 

دستورات gulp 

 

gulp.task برای مشخص کردن یک وظیفه 

 

gulp.src اشاره به محل قرار گیری فایل هامون

 

gulp.dest اشاره کردن به پوشه ی dest  یعنی خروجی های ما در آن قرار دارد مثلا فایل های فشرده شده

 

gulp.watch برای رصد کردن  فولدر هایی که دارن هی تغیر میکنند و رصد کننده تغیرات ما هستش 

 

 

در داخل این فایل باید بیایم و ابتدا پکیج اضافه شده امون رو در داخل آن معرفی کنیم و بعد با استفاده از متد های task و pipe فعالیت امون رو انجام بدهیم 

 

فشرده سازی عکس ها 

ابتدا نصب npm install --save  -dev  gulp-imagemin 

 const imagemin = require("gulp-imagemin");
 
   gulp.task("minifyimage",acync function () {
   gulp
    .src("src/assets/img/*")
    .pipe(imagemin())
    .pipe(gulp.dest("dist/assets/img"));
});

 

نکته : در داخل sass زمانی که فایلی با پیش وند _  شروع شد منظور اون این هستش که این فایل compile نشود که gulp  این چشم پوشی رو به صورت پیش فرض انجام میدهد 

 

فایل پیوست

emad ta
emad ta

12 آذر 99

5
حذف شده

نکته : ما برای کامپایل کردن ها  sass میتوانیم دو تا کار انجام بدهیم یک بیایم و در داخل خود پوشه ی css در داخل src اون هارو کامپایل کنیم و این جارو ادرس به فایل های html امون بدهیم و یا راه حل دوم این هستش که بیایم و ادرس رو در داخل پروژه نهایی یا همون dist  امون بهش بدهیم تا از اونجا وقتی کامپایل شد بیاد و بخوند 

 

کامپایل کردن فایل های sass به css

// minify sass
// npm install node-sass gulp-sass --save-dev


const sass = require("gulp-sass");
gulp.task("compile-sass", async function () {
  gulp
    .src("src/assets/sass/*.scss")
    .pipe(sass().on("error", sass.logError))
    .pipe(gulp.dest("src/assets/css/"));
});

برای کم کردن حجم کد های css

// minfy css file

//npm install gulp-clean-css --save-dev

const cleanCSS = require("gulp-clean-css");
gulp.task("minify-css", async function () {
  return gulp
    .src("src/assets/css/*.css")
    .pipe(cleanCSS({ compatibility: "ie8" }))
    .pipe(rename("style.min.css"))
    .pipe(gulp.dest("dist/assets/css"));
});

 

نکته : برای تغیر نام دادن از کامنت rename  استفاده میکینم  که خود این یک پکیج هستش 

// npm i gulp-rename --save-dev

const rename = require("gulp-rename"); 
.pipe(rename('style.min.css'))  در داخل کدهامون میایم و استفاده میکنیم 

کامپایل کردن فایل های pug به html

// compile PUG to HTML

// npm i gulp-pug --save-dev


const pug = require("gulp-pug");
gulp.task("compile-pug", async function () {
  return gulp.src("src/*.pug").pipe(pug()).pipe(gulp.dest("dist/"));
});

 

برای کم کردن حجم و یکی کردن فایل های جاوااسکریپت

// minify js

// npm install --save-dev gulp-concat

// npm install --save-dev gulp-uglify


const uglify = require("gulp-uglify");
const concat = require("gulp-concat");
gulp.task("compress-js", async function () {
  gulp
    .src("src/assets/js/*.js")
    .pipe(concat("app.min.js"))
    .pipe(uglify())
    // .pipe(rename("app.min.js"))
    .pipe(gulp.dest("dist/assets/js"));
});

برای استفاده از concat  لازم هستش که فقط برای js ها از اون استفاده بکنیم 

 

 

برای نوشتن یک task  به صورت پیش فرض به صورت زیر باید بیایم و عمل کنیم  و تک تک task  هایی که نیاز داریم تا به صورت پیش فرض بیان و اعمال بشوند رو ما نیاز داریم تا به صورت یک آرایه بهشون بدهیم

gulp.task('default',gulp.parallel('msg','copyhtml','minifyimage','compress-js','compile-sass','minify-css','compile-pug'));

حال فقط لازم است که از دستور gulp  استفاده بکنیم 

 

 

نوشتن task به نام watch که یک چیزی مثل همین تسک پیش فرض بالایی هستش ولی دیگه قطع نمیشه و دائمی میاد و رصد میکند و به صورت اتوماتیک هستش 

 gulp.task('watch',async function(){  
 
     gulp.watch('src/assets/img/*',gulp.series('minifyimage'));
      gulp.watch('src/assets/js/*.js',gulp.series('compress-js'));
       gulp.watch('src/assets/sass/*.scss',gulp.series('compile-sass'));
        gulp.watch('src/assets/css/*.css',gulp.series('minify-css'));
         gulp.watch('src/*.pug',gulp.series('compile-pug'));
         
         });

 

نکته : بهتر هستش که ما بیایم و کد های مربوط به watch  رو در بالای default  قرار دهیم همچنین در داخل پروژه هنگامی که کلن پوشه dist نداریم کافی است که در ابتدا از پیش فرض استفاده کنیم تا watch هم برای اولین بار فعال شود

 

فایل پیوست

emad ta

توسط

emad ta

12 آذر 99