Home >> Blog >> 什麼是 Gulp?如何使用 Gulp?

什麼是 Gulp?如何使用 Gulp?

Gulp 是開源社群的另一個工具,用於自動化 Web 開發中的重複性任務。雖然 bower、npm(節點包管理器)等工具可以幫助我們在應用程序中下載和配置可重用的包,但 Gulp 可以幫助我們自動化許多耗時的重複性客戶端任務。

這些任務包括捆綁和縮小腳本和样式表、將 less 或 sass 編譯為 css 樣式、將文件部署到服務器、圖像壓縮等。所以,簡單來說,Gulp 是一個任務運行工具,而 Bower、npm 等工具是包管理器.

Gulp 建立在 Node.js 之上,它已經擁有一個強大的社群,可以構建各種插件來執行各種任務。目前有超過 3000 多個插件可用,這使得我們能想到的幾乎所有可能的任務都可以自動化。gulp 任務寫入名為 gulpfile.js 的 javascript 文件中,該文件將由 Gulp 工具執行。

安裝 Gulp

Gulp 可以使用 npm(節點包管理器)工具在機器範圍內或本地安裝到應用程序。作為先決條件,Gulp 需要先安裝 Node.js。從這裡下載並安裝 Node.js。安裝 Node.js 也會安裝 npm 包管理器。

安裝後,您可以通過在命令提示符 下執行node -v和npm -v命令來驗證安裝。此命令將輸出相應安裝的版本,如下所示。

要在機器範圍內(全局)安裝 Gulp,請打開命令提示符並鍵入以下命令並輸入。

npm install gulp-cli -g

-g 代表全局安裝。這將在機器中全局下載並安裝 Gulp。參考下文,

安裝後,驗證 Gulp 安裝和版本,

C:\QuickStart\GulpDemo>gulp -v

[20:41:32] CLI 版本 1.3.0

使用 Gulp

讓我們嘗試使用 gulp 自動化 2 個簡單的任務,從 html 文件中刪除空格和縮小 JavaScript 文件。最後,我們將使用 gulp 將生成的文件複製到構建文件夾中。假設我們的應用程序位於文件夾 C:\QuickStart\GulpDemo 下。我們將不使用全局安裝的 Gulp,而是將本地版本的 gulp 安裝到應用程序文件夾中並使用它。

為此,請在命令提示符中訪問應用程序文件夾並將應用程序配置為使用 npm 包管理器。這是因為,Gulp 是使用 npm 安裝的。輸入npm init命令並回車創建 package.json 文件。這將詢問有關應用程序的一系列基本問題,最後在應用程序根文件夾下創建一個 package.json 文件。該文件將存儲應用程序的 npm 包依賴項。您可以將此步驟等同於擁有一個 package.config 文件,用於在 Visual Studio 項目中存儲 nuget 包依賴項。參考下文,

創建的 package.json 看起來像,

{

"name": "gulpdemo",

"version": "1.0.0",

"description": "test",

"main": "index.js",

"scripts": {

"test": "echo \"Error: no test specified\" && exit 1"

},

"author": "",

"license": "ISC"

}

npm 的 package.json 類似於 Nuget 用來存儲應用程序依賴項的 package.config。通過本地安裝 Gulp,當應用程序從版本控制中獲得最新版本時,它將在本地配置應用程序及其所有依賴項,而不是使用全局安裝。

接下來,讓我們在本地安裝 Gulp,

npm install gulp --save-dev

這將下載 gulp 並將其本地安裝到根文件夾下名為 node_modules 的文件夾中。–save-dev 開關將 Gulp 保存為 package.json 中的開發依賴項。所以,我們現在已經完成了所有基本設置,可以在我們的應用程序中使用本地安裝的 Gulp。

添加 HTML 任務

我們現在將獲得一個 gulp 插件,它可以幫助我們刪除 html 文件中的空白。用於此任務的插件是 gulp-htmlclean,安裝命令是,

npm install gulp-htmlclean --save-dev

在應用程序根文件夾下,我們將在 src 文件夾中有未清理的 html 文件。我們現在將創建 gulp 任務來清理這些文件並將其移動到根目錄下名為 build 的目標文件夾。

Gulp 工具要求將所有任務寫入一個名為 gulpfile.js 的 javascript 文件。首先,讓我們在應用根目錄下創建一個名為 gulpfile.js 的新 javascript 文件。清理文件和移動到目的地的 gulp 任務如下。

gulpfile.js

var gulp = require('gulp'), htmlclean = require('gulp-htmlclean');



var 文件夾 = {

src: 'src/',

構建:'構建/'

};



gulp.task('html', function() {

var out = folder.build + 'html/';

返回 gulp.src(folder.src + 'html/**/*')

.pipe(htmlclean())

.pipe(gulp.dest(out));

});

在了解上面的代碼之前,我們先來了解一下我們將用來創建任務的 gulp api。Gulp 主要公開了 4 種方法來構建任務。他們是,

1.吞嚥任務

.有助於創建新任務。

2.吞嚥.src

.從指定文件夾讀取文件

3.gulp.dest
. 將處理後的文件寫入指定的目標文件夾

4. gulp.watch

.監視或監視指定的源並在源中發生任何更改時調用任務。

還有另一種稱為readable.pipe()的方法,它實際上鍊接了上述 gulp 方法來執行任務。Gulp 實際上與 Streams 一起工作,即 gulp.src() 方法從源讀取文件作為 Stream 並通過 pipe() 方法將其傳遞給 gulp 插件以執行任務。因此, pipe() 方法從 gulp.src() 讀取流,執行插件任務並通過 gulp.dest() 將其傳遞到目標流以將其寫入目標。

回到 gulpfile.js 中的腳本,它創建名為 html 的任務,該任務從 src/html 文件夾中讀取 html 文件,並通過 htmlclean() 插件將其通過管道傳輸,並將輸出文件寫入 build/html 文件夾。頂部的 require() 方法包括用於創建任務的 gulp 和 gulp-htmlclean() 插件。保存此文件並從命令提示符執行任務,如下所示。命令語法是gulp [taskname]。見下文,

C:\QuickStart\GulpDemo>gulp html

[22:15:22] Using gulpfile C:\QuickStart\GulpDemo\gulpfile.js

[22:15:22] Starting 'html'...

[22:15:22] Finished 'html' after 147 ms

這將刪除源 html 文件中的空格並將輸出 html 文件複製到 build/html 文件夾中。

添加 JavaScript 縮小任務

要縮小 Javascript 文件,請將 uglify gulp 插件添加到我們的項目中。

npm install gulp-uglify --save-dev

類似於 html 文件,讓我們在 src 文件夾下有我們開發版本的 javascript 文件。

更新 gulpfile.js 以包含新任務以縮小 JavaScript 文件並將其複製到目標。此外,在 include 語句中包含 gulp-uglify 插件。下面的任務,

var gulp = require('gulp'),htmlclean = require('gulp-htmlclean'),uglify = require('gulp-uglify');

var folders = {

src: 'src/',

build: 'build/'

};



gulp.task('html', function() {

var out = folders.build + 'html/';

return gulp.src(folder.src + 'html/**/*')

.pipe(htmlclean())

.pipe(gulp.dest(out));

});



gulp.task('js',['html'], function() {

return gulp.src(folders.src + 'js/**/*')

.pipe(uglify())

.pipe(gulp.dest(folders.build + 'js/'));

新任務“js”將html任務作為依賴任務並使其首先執行。要執行任務,請轉到命令提示符並執行gulp js

C:\QuickStart\GulpDemo>gulp js

[22:22:52] Using gulpfile C:\QuickStart\GulpDemo\gulpfile.js

[22:22:52] Starting 'html'...

[22:22:52] Finished 'html' after 306 ms

[22:22:52] Starting 'js'...

[22:22:54] Finished 'js' after 2.21 s

創建默認任務

當我們從命令提示符發出命令gulp 時,我們可以在 gulpfile.js 中創建一個默認任務來運行項目中的所有任務。

gulp.task('default', ['js']);

執行所有任務

現在,輸入gulp和 enter 將運行我們項目中 gulpfile.js 中的所有任務。

C:\QuickStart\GulpDemo>gulp

[22:26:05] Using gulpfile C:\QuickStart\GulpDemo\gulpfile.js

[22:26:05] Starting 'html'...

[22:26:05] Finished 'html' after 137 ms

[22:26:05] Starting 'js'...

[22:26:07] Finished 'js' after 2.24 s

[22:26:07] Starting 'default'...

[22:26:07] Finished 'default' after 48 µs

執行後,您可以看到放置在 build 文件夾下的輸出文件。

最終的 gulpfile.js 是,

var gulp = require('gulp'),htmlclean = require('gulp-htmlclean'),uglify = require('gulp-uglify');



var folders = {

src: 'src/',

build: 'build/'

};



gulp.task('html', function() {

var out = folders.build + 'html/';

return gulp.src(folder.src + 'html/**/*')

.pipe(htmlclean())

.pipe(gulp.dest(out));

});



gulp.task('js',['html'], function() {

return gulp.src(folders.src + 'js/**/*')

.pipe(uglify())

.pipe(gulp.dest(folders.build + 'js/'));

});



gulp.task('default', ['js']);

js

js

the

npm

your

task

down

down

path

your

your

task

task

task

task

task

task

task

task

task

task

to

to

to

to

to

to