Gulp - 前端構(gòu)建工作流實(shí)戰(zhàn)

gulp 是前端開發(fā)過程中對代碼進(jìn)行構(gòu)建的工具,是自動化項(xiàng)目的構(gòu)建利器。其不僅能對網(wǎng)站資源進(jìn)行優(yōu)化,而且在開發(fā)過程中很多重復(fù)的任務(wù)能夠使用正確的工具自動完成;使用她,我們不僅可以很愉快的編寫代碼,而且大大提高我們的工作效率。

和其他同類型構(gòu)建工具相比,gulp 的入門簡單、效率更高,其 插件 的數(shù)量都不算多,但每個(gè)插件都足夠精簡和易用。

其更多特性和官方示例參考:http://www.gulpjs.com.cn/docs/recipes/

一、安裝 Gulp

  1. 全局安裝 gulp:
$ npm install --global gulp
  1. 作為項(xiàng)目的開發(fā)依賴(devDependencies)安裝:
$ npm install --save-dev gulp

二、快速上手

在項(xiàng)目根目錄下創(chuàng)建一個(gè)名為 gulpfile.js 的文件:

// 引入 gulp
var gulp = require('gulp');

// 自定義任務(wù),調(diào)用如:gulp test
gulp.task('test', function(){
  // 輸出一段內(nèi)容
  console.log('It works');
});

// 默認(rèn)任務(wù),調(diào)用如:gulp
gulp.task('default', ['test']);

在終端中運(yùn)行輸入 gulp 則可以執(zhí)行定義的 default 任務(wù),如果希望執(zhí)行某個(gè)指定的任務(wù)(如:test 任務(wù)),則可以輸入 gulp test

$ gulp

輸出:

$ gulp
[08:31:07] Using gulpfile ./gulpfile.js
[08:31:07] Starting 'test'...
It works
[08:31:07] Finished 'test' after 155 μs
[08:31:07] Starting 'default'...
[08:31:07] Finished 'default' after 104 μs
$ 

默認(rèn)的名為 default 的任務(wù)(task)將會被運(yùn)行。gulp.task() 的第二個(gè)參數(shù)只能是數(shù)組(array)或函數(shù)(function),如:

// 直接使用函數(shù)
gulp.task('taskOne', function(){
  // 任務(wù)邏輯
});

// 一個(gè)或多個(gè)任務(wù)
gulp.task('test', ['taskOne']);
gulp.task('test', ['taskOne', 'taskTwo']);

gulp.task() 的第三個(gè)參數(shù)和第二個(gè)參數(shù)的用法一樣,只是意義不同,參考:http://www.gulpjs.com.cn/docs/recipes/running-tasks-in-series/

// gulp.task('任務(wù)名', ['子任務(wù)'], 子任務(wù)的回調(diào)函數(shù))

// 串行任務(wù) 任務(wù)依賴
gulp.task('one', function(cb) {
    // 任務(wù)邏輯
});

// 任務(wù)依賴,必須先完成 參數(shù)二 的任務(wù),才能執(zhí)行 參數(shù)三 的邏輯
gulp.task('two', ['one'], function() {
    // 現(xiàn)在任務(wù) 'one' 已經(jīng)完成了
});

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

三、任務(wù)的先后順序 - 串行任務(wù) 任務(wù)依賴

上面已經(jīng)提到了串行任務(wù)的用法,gulp 可以通過返回一個(gè) promise 或者 stream 來讓串行任務(wù)變得更為清晰和易用(http://www.gulpjs.com.cn/docs/recipes/running-tasks-in-series/)。其實(shí),我們也的確是這樣使用的。

四、實(shí)戰(zhàn)

在該實(shí)戰(zhàn)中,我們會使用到 less 編譯,樣式壓縮,瀏覽器實(shí)時(shí)刷新等常見的功能。

4.1 初始化項(xiàng)目

進(jìn)入終端,并 cd 到對應(yīng)的工作目錄,建立工程,并初始化工程。

# 進(jìn)入工作目錄
$ cd sites

# 建立工程
$ mkdir myApp
$ cd myApp

# 初始化工程
$ npm init

4.2 添加 npm 依賴包

添加使用的 npm 包,大部分的包可以在 NPM官網(wǎng)NPM gulpfriendly 搜索到。當(dāng)前項(xiàng)目用到的如下:

# npm 安裝
$ npm install gulp gulp-changed gulp-cssnano gulp-less gulp-rename gulp-watch opn pump --save

# yarn 安裝
$ yarn add gulp gulp-connect gulp-cssnano gulp-less gulp-rename gulp-watch opn pump --save
  • gulp: 這個(gè)屬于基礎(chǔ)依賴,通常都是全局安裝的;
  • gulp-connect:它可以運(yùn)行一個(gè)支持實(shí)時(shí)重載(LiveReload)的網(wǎng)頁服務(wù)器;
  • gulp-cssnano:CSS 文件壓縮;
  • gulp-less:LESS 文件編譯為 CSS 文件;
  • gulp-rename:重命名文件;
  • gulp-watch:文件變動監(jiān)測;
  • opn:打開指定的 URL、文件;
  • pump:讓你可以使用數(shù)組替換 pipe語法;

執(zhí)行安裝完成后,工程目錄下回生成一個(gè) node_modules 目錄。

4.3 編寫 gulpfile 文件

我們在根目錄新建一個(gè) html 文件,內(nèi)容可暫時(shí)留空。然后在工程目錄新建一個(gè)名為 gulpfile 的 js 文件,按照下面的代碼設(shè)計(jì)一個(gè)或多個(gè)任務(wù)。

var gulp = require('gulp');
var pump = require('pump');
var opn = require('opn');
var less = require('gulp-less');
var rename = require('gulp-rename');
var cssnano = require('gulp-cssnano');
var watch = require('gulp-watch');
var connect = require('gulp-connect');

// HTML 結(jié)構(gòu)變化時(shí)刷新瀏覽器
gulp.task('html', function () {
    return pump([
        gulp.src('*.html'),
        connect.reload()
    ]);
});

// 連接服務(wù)器
gulp.task('connect', function () {
    connect.server({
        name: 'myApp',
        port: 8080,
        livereload: true
    });
    opn('http://localhost:8080/');
});

// LESS 編譯
gulp.task('less', function () {
    return pump([
        gulp.src('src/less/main.less'),
        less(),
        gulp.dest('styles/'),
        cssnano(),
        rename({
            extname: '.min.css'
        }),
        gulp.dest('styles/')
    ]);
});

// 監(jiān)控文件更新
gulp.task('watch', function () {
    // 監(jiān)控首頁文件
    watch(['./index.html', 'styles/*.css'], ['html']);

    // LESS 編譯
    watch('src/less/main.less', ['less']);
});

gulp.task('default', ['watch', 'connect']);

4.4 運(yùn)行測試

在終端輸入 gulp 然后回車,瀏覽器回自動打開 http://localhost:8080/ ,如果你的 index.html 文件沒有內(nèi)容,瀏覽器可能會顯示為空白頁面。

編輯 index.html 的內(nèi)容,瀏覽器頁面也會跟著刷新。

更新 src/less/main.less 的內(nèi)容時(shí),項(xiàng)目的 styles/ 目錄下還會出現(xiàn)兩個(gè) CSS 文件。

index.html 引入 CSS 文件,既可以實(shí)現(xiàn)實(shí)時(shí)編輯和預(yù)覽。

可以在終端輸入 control + C 來退出任務(wù)。

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

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

  • gulpjs是一個(gè)前端構(gòu)建工具,與gruntjs相比,gulpjs無需寫一大堆繁雜的配置參數(shù),API也非常簡單,學(xué)...
    依依玖玥閱讀 3,304評論 7 55
  • gulpjs是一個(gè)前端構(gòu)建工具,與gruntjs相比,gulpjs無需寫一大堆繁雜的配置參數(shù),API也非常簡單,學(xué)...
    井皮皮閱讀 1,401評論 0 10
  • gulpjs是一個(gè)前端構(gòu)建工具,與gruntjs相比,gulpjs無需寫一大堆繁雜的配置參數(shù),API也非常簡單,學(xué)...
    小裁縫sun閱讀 1,030評論 0 3
  • 1、gulp的安裝 首先確保你已經(jīng)正確安裝了nodejs環(huán)境。然后以全局方式安裝gulp: npm install...
    F_imok閱讀 2,491評論 1 11
  • 在現(xiàn)在的前端開發(fā)中,前后端分離、模塊化開發(fā)、版本控制、文件合并與壓縮、mock數(shù)據(jù)等等一些原本后端的思想開始...
    Charlot閱讀 5,659評論 1 32

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