Gulp - 入門教學

前端的自動化佈署工具有許多,本篇介紹熱門的 gulp.js,來提升工作效率吧!

 

一、前言

在前端的開發過程中,當檔案要發佈的時候,總會進行一些批次的處理,

又或者監控檔案、程式碼編譯等等,諸如:

  1. LESS、SASS、SCSS 、 Stylus 編譯。
  2. JavaScript Template 編譯。
  3. JS、CSS 檔案前綴處理。
  4. 差異化抽取檔案。
  5. 程式碼混淆、打包。

目前較熱門的有 GruntGulp,本文將介紹 gulp 的安裝以及使用方法。

 

 

二、Gulp安裝

gulp 必須透過 npm 下載,請務必先安裝好 node.js 唷!

 

首先進行全域安裝 gulp,如此一來才能使用 gulp 指令。

npm install --global gulp

緊接著在當前專案底下安裝 gulp。

npm install gulp

版本目前是 3.9.1。

npm list gulp

 

 

三、程式碼撰寫

新增檔案 ,然後引用 gulp,

task 是一個任務的建立,hello 則為任務名稱。

gulpfile.js

const gulp = require('gulp');
 
gulp.task('hello', function(){
	console.log('Hello Gulp.js');
});

 

 

四、執行任務

當我們要執行指定的任務時,直接 gulp [任務名稱] 即可。

gulp hello

 

可以看到 cmd 輸出,任務的開始與結束,

而其中我們寫的 console.log 也會被印出來。

 

 

五、延伸套件

而通常我們在使用 gulp 的時候,都會安裝一些常用的套件,

接下來會教大家使用一些常用的套件。

  1. gulp-jshint
  2. gulp-uglify
  3. gulp-concat

 

 

gulp-jshint】-檢查 JavaScript 語法

jshint 提供對於 JavaScript 的語法檢查,在使用此之前,要先安裝其原本的套件。

npm install jshint

 

之後才可以安裝基於 jshint 所延伸過來的 gulp-jshint。

npm install gulp-jshint

 

如果只有安裝 gulp-jshint,而其仰賴的 jshint 沒安裝的話,也不用擔心,

在安裝的時候 npm 會提醒使用者。

目前的 jshint 版本為 2.9.4。

首先我們先任意建立一個 js 檔案,待會可以做為檢查測試用。

我們都知道在 ES6 中, const 為常數,不可重複定義其值,因此下方的範例將是錯誤的。

test.js

const a = 1;
a = 2;

gulpfile.js

const gulp = require('gulp'),
    jshint = require('gulp-jshint');

gulp.task('check', function () {
    gulp.src('test.js')
        .pipe(jshint())
        .pipe(jshint.reporter())
    console.log('check done.');
});

上述引用了 gulp-jshint,在下方我們利用 gulp.src 來表示來源路徑,

  • .pipe(jshint()):執行檢查
  • .pipe(jshint.reporter()): 將結果印出

執行檢查 

gulp check

 系統回報兩個錯誤 2errors:

  • line1 :回報我們 const 是 ES6 用法(但會將其歸類為 error),是不該出現的。
  • line2:要被覆寫的 a 屬於常數,是該出現的。

 jshint 版本 2.9.4 對於 ES6 需要另外宣告 esnext,可以從官方得知該消息。

因次我們修正一下程式碼:

gulpfile.js

gulp.task('check', function () {
    gulp.src('test.js')
        .pipe(jshint({
            esnext: true
        }))
        .pipe(jshint.reporter())
    console.log('check done.');
});

 

將 jshint 加上參數 esnext:true 就能夠處理,如此一來就可以用來檢查 JS 囉!

 

 

gulp-uglify​】-JavaScript 程式碼壓縮混淆

能夠使程式碼壓縮,或是將程式碼混淆。

目前不支援 ES6,如果要針對 ES6,建議先透過 gulp-babel 轉換為 ES5

 

安裝 gulp-uglify 套件。

npm install gulp-uglify

 

任意建立 js 檔案。

test.js

var a = 1, b = 2, c = 3;
var d = a * b * c + a;
console.log(d);

gulpfile.js

const gulp = require('gulp'),
    uglify = require('gulp-uglify');

gulp.task('uglify', function () {
    gulp.src('test.js')
        .pipe(uglify())
        .pipe(gulp.dest('dist'))
});
  • gulp.dest 為輸出目的之資料夾

 

執行結果

gulp uglify

 

 

gulp-concat】-程式碼打包

簡單就是將多個檔案合併成一支囉!

安裝 gulp-concat。

npm install gulp-concat

 

以下範例將 test.js 與 test2.js 進行打包

test.js


/**
 * This is test.js
 */
console.log('test');

test2.js


/**
 * This is test2.js
 */
console.log('test2');

gulpfile.js

const gulp = require('gulp'),
    concat = require('gulp-concat');

gulp.task('concat', function () {
    gulp.src('js/*.js')
        .pipe(concat('bundle.js'))
        .pipe(gulp.dest('dist'))
});
  • gulp.src:來源為 js 資料夾底下所有的 js檔案。
  • concat:打包後的檔名為 bundle.js
  • gulp.dest:輸出到 dist 資料夾中

 

執行結果:

gulp concat

 

 

六、後記

對於前端的自動化佈署,如何加快開發的腳步是十分重要的,

本篇針對 gulp 僅提供簡單安裝使用,更多的套件延伸應用將在下一篇提到,

如何即時監控檔案、編譯樣式SASS、差異備份等等......。

因為內容太多惹 rrrr

 

 

參考資料:

gulp 中的增量编译 - 韩子迟 - 博客园

Gulp:任务自动管理工具 -- JavaScript 标准参考教程(alpha)

 

有勘誤之處,不吝指教。ob'_'ov