簡單易懂的gulp入門配置

寫在前面:這篇文章 基于gulp3版本寫的。如果是gulp4版本運行下面一些指令可能會報錯,個別已給出 gulp4版本的解決方案,但是自動刷新的功能找不到gulp4的解決方案,所以仍然提供的是gulp3版本方案。

安裝Gulp

安裝Gulp之前你需要先安裝Node.js。

安裝完Node.js,使用Terminal(終端,win下是cmd)用下面命令安裝Gulp

sudo npm install gulp -g

-g 表示全局安裝,這樣你在電腦上任何位置都能只用gulp 命令。

npm install 是指定從Node Package Manager安裝的命令。

只有mac用戶才需要sudo命令,Mac 用戶需要管理員權(quán)限才能全局安裝,所以需要sudo。

接下來使用Gulp創(chuàng)建項目。

創(chuàng)建Gulp項目

首先,我們新建一個project文件夾,然后進到目錄下執(zhí)行 npm init 命令:

npm init

npm init命令會為你創(chuàng)建一個package.json文件,這個文件保存著這個項目相關(guān)信息。比如你用到的各種依賴(這里主要是插件)(終端會自動出現(xiàn)下面內(nèi)容,這里先隨便填就行)

package.json.png

創(chuàng)建完之后,我們執(zhí)行下面的命令:

npm install gulp--save-dev

這一次,我們局部安裝Gulp。使用—save-dev,將通知計算機在package.json中添加gulp依賴。

package.json添加了gulp.png

在正式開始之前,我們再來明確下項目的目錄結(jié)構(gòu)。

目錄結(jié)構(gòu)

Gulp非常之靈活,理解它的內(nèi)部工作,你就能在項目中得心應(yīng)手。

這篇文章,我們使用通用的webapp目錄結(jié)構(gòu):

項目目錄.png

在這個結(jié)構(gòu)中,我們使用app文件夾作為開發(fā)目錄(所有的源文件都放在這下面),dist文件夾用來存放生產(chǎn)環(huán)境下的內(nèi)容。

這些文件名,你想怎么起都行,但請務(wù)必記住你的目錄結(jié)構(gòu)?,F(xiàn)在我們來創(chuàng)建gulpfile.js。

第一個Gulp任務(wù)

你需要先在根目錄下創(chuàng)建一個gulpfile.js文件。

// gulpfile.js 文件引入

var gulp = require('gulp');

這行命令告知Node去node_modules中查找gulp包,先局部查找,找不到就去全局環(huán)境中查找。找到之后就會賦值給gulp變量,然后我們就可以使用它了。

簡單的任務(wù)如下所示:

寫個Hello World,是這樣的:

gulp.task('hello',function() {
     console.log('Hello World!');
});

命令行中執(zhí)行 gulp hello,發(fā)現(xiàn)編譯過程如下圖所示,說明這個任務(wù)已經(jīng)跑起來了。

gulp hello.png

但是如果編譯如下圖,說明出錯了,可能是gulp的版本問題。

gulp hello2.png

可以改成這樣就沒問題了:

gulp.task('hello', async() => {
     await console.log('Hello World!');
});

Gulp任務(wù)通常都會比這難一丁點,就一丁點。通常會包含兩個特定的Gulp方法和一些列Gulp插件。

大概這樣:

gulp.task('task-name',function() {
     return gulp.src('source-files')
                .pipe(aGulpPlugin())
                .pipe(gulp.dest('destination'))
})

正如你所見,兩個Gulp方法,src,dest,一進一出。下面用編譯Sass來舉栗子。

Gulp執(zhí)行預(yù)處理

我們使用gulp-sass插件來編譯Sass。安裝插件的步驟是這樣的:

使用npm install 命令安裝
npm install gulp-sass --save-dev
在gulpfile中引入插件,用變量保存
var gulp =require('gulp');
var sass =require('gulp-sass');
在任務(wù)中使用
gulp.task('sass',function(){
       return gulp.src('source-files')   //這里是傳入的需要gulp的源文件
                  .pipe(sass()) // 這里是前面require進來的gulp-sass插件
                  .pipe(gulp.dest('destination'))  //這里是輸出的目標(biāo)文件

});

我們需要給sass任務(wù)提供源文件和輸出位置。所以我們先在項目中創(chuàng)建app/scss文件夾,再在scss文件夾下新建styles.scss文件。這個文件將在gulp.src中用到。

sass處理之后,我們希望它生成css文件并產(chǎn)出到app/css目錄下,可以這樣寫:

gulp.task('sass',function(){
       return gulp.src('app/scss/styles.scss')
                  .pipe(sass())
                  .pipe(gulp.dest('app/css'))
});

然后在styles.scss 寫一些樣式代碼:

styles.scss.png

命令行執(zhí)行g(shù)ulp sass,你將看到app/css/styles.css文件下會有下面的代碼:

styles.css.png

styles.css是gulp自動為我們生成的。
使用Sass就這么簡單。但是通常我們不止有一個scss文件。這時候可以使用Node通配符

Node中的通配符

通配符是一種匹配模式,允許你匹配到多個文件。不止是Node,很多平臺都有,有點像正則表達式。

使用通配符,計算機檢查文件名和路徑進行匹配。

大部分時候,我們只需要用到下面4種匹配模式:

*.scss : * 號匹配當(dāng)前目錄任意文件,所以這里 *.scss 匹配當(dāng)前目錄下所有scss文件

*/.scss :匹配當(dāng)前目錄及其子目錄下的所有scss文件。

!not-me.scss :!號移除匹配的文件,這里將移除not-me.scss

*.+(scss|sass) :+號后面會跟著圓括號,里面的元素用|分割,匹配多個選項。這里將匹配scss和sass文件。

那么還是上面的栗子,改造一下:

gulp.task('sass',function() {
         return gulp.src('app/scss/**/*.scss')
                    .pipe(sass())
                    .pipe(gulp.dest('app/css'))

})

我們這會再在scss文件夾下新建一個style2.scss文件。

style2.scss.png

命令行執(zhí)行g(shù)ulp sass。然后再看app/css目錄下,現(xiàn)在已經(jīng)有兩個文件了,分別是:style.css 和 style2.css。

style2.css.png

現(xiàn)在我們能處理多個文件了,但是不想每次都要執(zhí)行命令,怎么辦?Gulp就是為懶人而生的,我們可以使用watch命令,自動檢測并執(zhí)行。

監(jiān)聽Sass文件

Gulp提供watch方法給我們,語法如下:

gulp.watch('files-to-watch', ['tasks','to','run']);

將上面的栗子再改下:

gulp.watch('app/scss/**/*.scss', ['sass']);

通常我們監(jiān)聽的還不只是一個文件,把它變成一個任務(wù):

gulp.task('watch',function(){
        gulp.watch('app/scss/**/*.scss', ['sass']);
        // Other watchers
})

執(zhí)行g(shù)ulp watch命令。

gulp watch.png

如果是gulp4 版本的會報錯如下:

gulp watch error.png

['sass']是Gulp3的方式指定依賴任務(wù),在Gulp4中使用gulp.series和gulp.parallel。

改成這樣就好:

gulp.task('watch', function(){
      gulp.watch('app/scss/**/*.scss', gulp.series('sass'));
      // Other watchers
});

有了監(jiān)聽,每次修改文件保存之后,Gulp都將自動為我們執(zhí)行任務(wù)。

gulp-for-beginner-watch-compile.gif

還不夠,修改完直接幫我刷新瀏覽器行嗎。

使用Browser Sync自動刷新

Browser Sync 幫助我們搭建簡單的本地服務(wù)器并能實時刷新瀏覽器

新插件?記?。“惭b,引入,使用。

npm install browser-sync--save-dev

引入:

var browserSync =require('browser-sync');

我們創(chuàng)建一個broswerSync任務(wù),我們需要告知它,根目錄在哪里。

gulp.task('browserSync', function() {
    browserSync({
        server: {
            baseDir:'app'
        },
    })
})

我們稍微修改一下之前的代碼,讓每次css文件更改都刷新一下瀏覽器:

gulp.task('sass',function() {
    return gulp.src('app/scss/**/*.scss') // Gets all files ending with .scssin app/scss
        .pipe(sass())
        .pipe(gulp.dest('app/css'))
        .pipe(browserSync.reload({
            stream:true
    }))
});

然后改一下watch任務(wù)如下:

gulp.task('watch', gulp.series('sass', 'browserSync', function(){
      gulp.watch('app/scss/**/*.scss', gulp.series('sass'));
      // Other watchers
}));

執(zhí)行 gulp watch:

gulp watch.png

?。?!但是改動文件之后,并沒有實時刷新,終端也沒有監(jiān)聽得到。找了很久沒有找到方法解決,我最后把gulp的版本降回了3.9。

cnpm install gulp@3.9.1

然后改了gulpfile.js 文件的watch任務(wù)寫法如下:

gulp.task('watch', ['browserSync', 'sass'], function (){
        gulp.watch('app/scss/**/*.scss', ['sass']);
});

再執(zhí)行g(shù)ulp wacth 此時發(fā)現(xiàn) 再改動scss文件。終端立馬監(jiān)聽得到并且瀏覽器頁面也自動刷新了。真是折騰?。。?!

不止是scss修改的時候需要刷新瀏覽器吧?再改改:

gulp.task('watch', ['browserSync', 'sass'], function (){
        gulp.watch('app/scss/**/*.scss', ['sass']);
        gulp.watch('app/*.html', browserSync.reload);
        gulp.watch('app/js/**/*.js', browserSync.reload);
});

現(xiàn)在不論是改動scss,還是html,還是js都能自動刷新了。

gulp watch.png

gulp-for-beginner-bs-change-bg.gif

附上gulpfile.js 的代碼:

var gulp = require('gulp');
var sass = require('gulp-sass');
var browserSync = require('browser-sync');

gulp.task('hello', async() => {
   await console.log('Hello World!');
});

//編譯Sass
gulp.task('sass', function() {
  return gulp.src('app/scss/**/*.scss') // Gets all files ending with .scss in app/scss
    .pipe(sass())
    .pipe(gulp.dest('app/css'))
    .pipe(browserSync.reload({
      stream: true
    }))
});

gulp.task('browserSync', function() {
  browserSync({
    server: {
      baseDir: 'app'
    },
  })
});

//監(jiān)聽
gulp.task('watch', ['browserSync', 'sass'], function (){
     gulp.watch('app/scss/**/*.scss', ['sass']);
   gulp.watch('app/*.html', browserSync.reload);
    gulp.watch('app/js/**/*.js', browserSync.reload);
});

今天參考網(wǎng)上的文章學(xué)習(xí)了gulp,一邊記錄下來。希望能加深記憶的同時幫到需要的人。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在現(xiàn)在的前端開發(fā)中,前后端分離、模塊化開發(fā)、版本控制、文件合并與壓縮、mock數(shù)據(jù)等等一些原本后端的思想開始...
    Charlot閱讀 5,659評論 1 32
  • 原文標(biāo)題:Gulp for Beginners作者: Zell Liew翻譯:治電小白菜原文地址:https://...
    ZZES_ZCDC閱讀 1,691評論 6 18
  • Sass&Gulp 一、sass介紹 (一) SASS是一種CSS的開發(fā)工具,提供了許多便利的寫法,大大節(jié)省了設(shè)計...
    鋒享前端閱讀 1,645評論 0 3
  • 安裝Gulp首先需要安裝Node.js,并在控制臺輸入$ npm install gulp -gMac端需要寫成$...
    LaBaby_閱讀 1,020評論 0 1
  • 原文地址:https://css-tricks.com/gulp-for-beginners/原文代碼:https...
    小雨雪smile閱讀 1,559評論 0 2

友情鏈接更多精彩內(nèi)容