前端自動化構建工具gulp記錄

upoalz1c88 8年前發布 | 26K 次閱讀 CSS 項目構建 gulp

來自: http://www.cnblogs.com/strick/p/5151714.html

一、安裝

1)安裝nodejs

通過 nodejs 的npm安裝gulp,插件也可以通過npm安裝。windows系統是個.msi工具,只要一直下一步即可,軟件會自動在寫入環境變量中,這樣就能在cmd命令窗口中直接使用node或npm指令。

我上面的cmd,已經被 git 封裝過了,字體都變成彩色的了。安裝了這個工具后,還可以通過Git Bash打Linux的命令。git是版本控制的工具,這里也不多說了。

2)npm

npm (node package manager)nodejs的包管理器,用于node插件管理(包括安裝、卸載、管理依賴等)

gulp赫然出現在npm的首頁中。

命令提示符執行:

npm install <name> [-g] [--save-dev]

1. <name> :node插件名稱。例:npm install gulp-less --save-dev

2. -g :全局安裝。將會安裝在C:\Users\Administrator\AppData\Roaming\npm,并且寫入系統環境變量;

非全局安裝:將會安裝在當前定位目錄;

全局安裝可以通過命令行在任何地方調用它,本地安裝將安裝在定位目錄的node_modules文件夾下,通過require()調用;

3. --save :將保存配置信息至package.json(package.json是nodejs項目配置文件);

4. -dev :保存至package.json的devDependencies節點,不指定-dev將保存至dependencies節點

配置文件package.json是為了方便下載相關的包,只需要在有這個文件的文件夾下面執行“npm install”(如果安裝了cnpm就用“cnpm install”),則會根據package.json下載所有需要的包。【注:我用demo中的package文件在另外一臺電腦上面直接安裝,打“gulp watch”的時候出現了很多錯誤】

3)cnpm

因為npm安裝插件是從國外服務器下載,受網絡影響大,可能出現異常。

在國內推薦使用 淘寶NPM鏡像 。“這是一個完整 npmjs.org 鏡像,你可以用此代替官方版本(只讀),同步頻率目前為 10分鐘 一次以保證盡量與官方服務同步”

安裝指令如下:

npm install -g cnpm --registry=https://registry.npm.taobao.org

注意安裝的時候會出現錯誤提示,你可以關閉命令窗口再打開,打入“cnpm -v”可以查看版本號。cnpm跟npm用法完全一致。

4)全局安裝gulp

cnpm install gulp -g

如果在某個工程文件夾中提示錯誤,那就手動再安裝下“ gulp ”:

5)新建package.json文件

在命令窗口輸入指令“cnpm init”。如果在Git Bash打這個指令,會報“No gulpfile found”的錯誤。

6)新建gulpfile.js文件

gulpfile.js是gulp項目的配置文件,里面是task的配置。簡易代碼如下:

var gulp = require('gulp');

gulp.task('default', function() { // 將你的默認的任務代碼放在這 });</pre>

二、插件與功能

1)全局配置config

可以將需要在gulpfile中引用的參數,放到這里,包括一些路徑,功能的開關等。例如:

//全局配置文件
module.exports = {
    name : '.....',
    devPath : '.....',    //項目根路徑,根路徑下可以包含多個項目
    prodPath : '....', //生產路徑根路徑
    sassPath : '.....', //SASS包含文件路徑
    rmHtmlWhitespace : false,//html中是否去除空格
    server : {
        port : 8088
    }
};

注意下這里使用了module.exports,這是nodejs的語法。在gulpfile中將會用require引用config。

//加載項目配置
var config = require('./config');

2)監控gulp.watch

這個是gulp自帶的,就是當你的文件改動了后,就做相應的task。還有一個插件 gulp-watch

監控sass中的文件變化,一有變化就做sass的編譯。“**”與“*”這種語法可以參考《 Gulp:任務自動管理工具

gulp.task('watch', function() {
    livereload.listen();
    gulp.watch('**.html', ['html']);
      gulp.watch('./sass/*.scss', ['sass']);
      gulp.watch('./css/*.css', ['css']);
      gulp.watch('./js/*.js', ['js']);
});

監控了四個地方的修改,js、html、css和sass,并且有做了自動刷新 livereload 。這個是通過“ gulp- livereload ”來實現的。

firefox貨chrome要分別安裝插件才可運行。chrom插件如下:

安裝完后會在瀏覽器中出現個小按鈕,,注意是黑色的時候才是在執行中。還有就是要在相應的task中加相應的代碼:

.pipe(livereload())

3)sass編譯與css壓縮

通過sass編寫css,能更模塊化,多人協作比較方便。安裝 gulp-sass 。“ gulpPlumber() ”是引用了“ gulp-plumber ”,任務錯誤中斷自動重傳。

gulp.task('sass', function() {
    gulp.src('./sass/*.scss')
            .pipe(plumber())
            .pipe(sass())
            .pipe(gulp.dest('./css'))
            .pipe(livereload());
});

gulp-cssnano ,壓縮CSS代碼。

gulp.task('css', ['sass'], function() {
    //先刪除dist中的css,有時候會不更新
    gulp.src('./dist/css/*.css')
        .pipe(rimraf({force: true}));

gulp.src('./css/*.css')
    .pipe(cssnano())
    .pipe(gulp.dest('./dist/css'))
    .pipe(livereload());

});</pre>

4)js壓縮與模塊化合并

使用 gulp-uglify 做js的壓縮。 gulpRimraf()用來刪除文件夾,引用自 gulp-rimraf

模塊化合并使用 webpack-stream

gulp.task('js', function() {
    //先刪除dist中的css,有時候會不更新
    gulp.src('./dist/js/*.js')
        .pipe(rimraf({force: true}));

gulp.src('./js/*.js')
    .pipe(plumber())
    .pipe(jshint())
    .pipe(jshint.reporter('default'))
    .pipe(uglify())
    .pipe(gulp.dest('./dist/js'))
    .pipe(livereload());

});</pre>

上面的jshint是用來分析代碼的,例如分號沒寫。通過打指令“ gulp-jshint ” 。

5)image圖片無損壓縮

通過 gulp-image 壓縮的圖片,有時候能牙70%以上,非常給力。

gulp.task('image', function(){
    gulp.src('./img/*.+(jpg|png|gif|svg)')
         .pipe(imagemin())
       .pipe(gulp.dest('./dist/img'));
});

6)html壓縮

經過 gulp-htmlmin 壓縮過的html可以縮小很多,可以看到都擠到了一起,有很多參數可以選擇,比如去除空格等。

gulp.task('html', function() {
    gulp.src('*.html')
        .pipe(htmlmin({collapseWhitespace: true}))
        .pipe(gulp.dest('./dist'))
        .pipe(livereload());
});

7)fontmin字體壓縮

網上有很多webfont,例如國外的 Font Awesome ,國內的 iconfont 。都能做出漂亮的自定義字體。

與西文字體不同,由于字符集過大,中文字體無法享受 webfont 帶來的便利。為了讓中文字體也乘上這道風,我們需要對其進行min。使用指令“ gulp-fontmin ”。

gulp.task('font', function() {
    gulp.src('font/*.+(eot|svg|ttf|woff)')
      .pipe(fontmin({
          text: '人曬'
      }))
      .pipe(gulp.dest('dist/font'));
});

配置的兩個字“人曬”與沒配置的“國”,明顯有區別。

8)啟動一個本地調試服務器

通過 gulp-connect ,可以做個server。如果你用notpad++這種開發頁面,那這個指令會很有用。

gulp.task('server', function(){
    var option = {
        root : config.devPath,
        port : config.server.port
    };
    if(config.server.root){
        option.root = config.server.root;
    }
    connect.server(option);
});

上面的localhost可以改成本機的IP地址,手機與電腦在同一個網段的話,就可以直接用手機調試了。

demo下載地址:

http://download.csdn.net/download/loneleaf1/9416080

參考資料:

http://www.ydcss.com/archives/18 gulp詳細入門教程

http://www.runoob.com/nodejs/nodejs-npm.html NPM 使用介紹

http://javascript.ruanyifeng.com/tool/gulp.html Gulp:任務自動管理工具

http://www.ghostchina.com/module-exports-and-exports-in-node-js/ Node.js 系列之 —— module.exports 與 exports

http://segmentfault.com/a/1190000002658165?utm_source=tuicool JGulp: 利用Gulp 配置的前端項目自動化工作流

http://www.w3ctech.com/topic/935 Fontmin 快速指南

</div>

 本文由用戶 upoalz1c88 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!