gulp輕鬆上手

第1步:安裝Node


 

首先,最基本也最重要的是,咱們須要搭建node環境。訪問 nodejs.org,下載完成後直接運行程序,就一切準備就緒。npm會隨着安裝包一塊兒安裝,稍後會用到它。javascript

爲了確保Node已經正確安裝,咱們執行幾個簡單的命令。css

node -v
npm -v

若是這兩行命令沒有獲得返回,可能node就沒有安裝正確,進行重裝。java

 

第2步:安裝gulp


 

首先咱們要全局安裝一遍:node

sudo npm install -g gulp

運行時注意查看命令行有沒有錯誤信息,安裝完成後,你能夠使用下面的命令查看gulp的版本號以確保gulp已經被正確安裝。android

gulp -v

接着咱們要進去到項目的根目錄再安裝一遍ios

sudo npm install gulp

第3步:新建gulpfile.js文件


 

咱們將要使用Gulp插件來完成咱們如下任務:git

  1. sass的編譯(gulp-sass) 
  2. 自動添加css前綴(gulp-autoprefixer) 
  3. 壓縮css(gulp-minify-css) 
  4. js代碼校驗(gulp-jshint) 
  5. 合併js文件(gulp-concat) 
  6. 壓縮js代碼(gulp-uglify) 
  7. 壓縮圖片(gulp-imagemin) 
  8. 自動刷新頁面(gulp-livereload) 
  9. 圖片緩存,只有圖片替換了才壓縮(gulp-cache) 
  10. 更改提醒(gulp-notify)

安裝這些插件須要運行以下命令:github

npm install gulp-sass gulp-autoprefixer gulp-minify-css gulp-jshint gulp-concat gulp-uglify gulp-imagemin gulp-notify gulp-rename gulp-livereload gulp-cache 

更多插件能夠看這裏gulpjs.com/plugins/正則表達式

接着咱們要建立一個gulpfile.js在根目錄下,gulp只有四個API: taskwatchsrc,和 destsql

task這個API用來建立任務,在命令行下能夠輸入 gulp test 來執行test的任務。
watch這個API用來監放任務。
src這個API設置須要處理的文件的路徑,能夠是多個文件以數組的形式[main.scss, vender.scss],也能夠是正則表達式/**/*.scss
dest這個API設置生成文件的路徑,一個任務能夠有多個生成路徑,一個能夠輸出未壓縮的版本,另外一個能夠輸出壓縮後的版本。

3.1 加載插件:

// Load plugins
var gulp = require('gulp'),
    sass = require('gulp-sass'),
    autoprefixer = require('gulp-autoprefixer'),
    minifycss = require('gulp-minify-css'),
    jshint = require('gulp-jshint'),
    uglify = require('gulp-uglify'),
    imagemin = require('gulp-imagemin'),
    rename = require('gulp-rename'),
    concat = require('gulp-concat'),
    notify = require('gulp-notify'),
    cache = require('gulp-cache'),
    livereload = require('gulp-livereload');

3.2 創建任務:

3.2.1 編譯sass、自動添加css前綴和壓縮

首先咱們編譯sass,添加前綴,保存到咱們指定的目錄下面,還沒結束,咱們還要壓縮,給文件添加 .min 後綴再輸出壓縮文件到指定目錄,最後提醒任務完成了:

// Styles任務
gulp.task('styles', function() {
    //編譯sass
    return gulp.src('stylesheets/main.scss')
    .pipe(sass())
    //添加前綴
    .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
    //保存未壓縮文件到咱們指定的目錄下面
    .pipe(gulp.dest('stylesheets'))
    //給文件添加.min後綴
    .pipe(rename({ suffix: '.min' }))
    //壓縮樣式文件
    .pipe(minifycss())
    //輸出壓縮文件到指定目錄
    .pipe(gulp.dest('assets'))
    //提醒任務完成
    .pipe(notify({ message: 'Styles task complete' }));
});

3.2.2 js代碼校驗、合併和壓縮

// Scripts任務
gulp.task('scripts', function() {
    //js代碼校驗
    return gulp.src('javascripts/*.js')
    .pipe(jshint())
    .pipe(jshint.reporter('default'))
    //js代碼合併
    .pipe(concat('all.js'))
    //給文件添加.min後綴
    .pipe(rename({ suffix: '.min' }))
    //壓縮腳本文件
    .pipe(uglify())
    //輸出壓縮文件到指定目錄
    .pipe(gulp.dest('assets'))
    //提醒任務完成
    .pipe(notify({ message: 'Scripts task complete' }));
});

3.2.3 圖片壓縮

// Images
gulp.task('images', function() {
  return gulp.src('images/*')
    .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))
    .pipe(gulp.dest('images'))
    .pipe(notify({ message: 'Images task complete' }));
});

3.2.4 事件監聽

// Watch
gulp.task('watch', function() {
  // Watch .scss files
  gulp.watch('stylesheets/*.scss', ['styles']);
  // Watch .js files
  gulp.watch('javascripts/*.js', ['scripts']);
  // Watch image files
  gulp.watch('images/*', ['images']);
  // Create LiveReload server
  livereload.listen();
  // Watch any files in assets/, reload on change
  gulp.watch(['assets/*']).on('change', livereload.changed);
});

完整代碼:

/*!
 * gulp
 * $ npm install gulp-sass gulp-autoprefixer gulp-minify-css gulp-jshint gulp-concat gulp-uglify gulp-imagemin gulp-notify gulp-rename gulp-livereload gulp-cache --save-dev
 */
// Load plugins
var gulp = require('gulp'),
    sass = require('gulp-sass'),
    autoprefixer = require('gulp-autoprefixer'),
    minifycss = require('gulp-minify-css'),
    jshint = require('gulp-jshint'),
    uglify = require('gulp-uglify'),
    imagemin = require('gulp-imagemin'),
    rename = require('gulp-rename'),
    concat = require('gulp-concat'),
    notify = require('gulp-notify'),
    cache = require('gulp-cache'),
    livereload = require('gulp-livereload');
// Styles
gulp.task('styles', function() {
    return gulp.src('stylesheets/main.scss')
    .pipe(sass())
    .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
    .pipe(gulp.dest('stylesheets'))
    .pipe(rename({ suffix: '.min' }))
    .pipe(minifycss())
    .pipe(gulp.dest('assets'))
    .pipe(notify({ message: 'Styles task complete' }));
});
// Scripts
gulp.task('scripts', function() {
  return gulp.src('javascripts/*.js')
    .pipe(jshint())
    .pipe(jshint.reporter('default'))
    .pipe(concat('all.js'))
    .pipe(rename({ suffix: '.min' }))
    .pipe(uglify())
    .pipe(gulp.dest('assets'))
    .pipe(notify({ message: 'Scripts task complete' }));
});
// Images
gulp.task('images', function() {
  return gulp.src('images/*')
    .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))
    .pipe(gulp.dest('images'))
    .pipe(notify({ message: 'Images task complete' }));
});
// Default task
gulp.task('default', function() {
    gulp.start('styles', 'scripts', 'images');
});
// Watch
gulp.task('watch', function() {
  // Watch .scss files
  gulp.watch('stylesheets/*.scss', ['styles']);
  // Watch .js files
  gulp.watch('javascripts/*.js', ['scripts']);
  // Watch image files
  gulp.watch('images/*', ['images']);
  // Create LiveReload server
  livereload.listen();
  // Watch any files in assets/, reload on change
  gulp.watch(['assets/*']).on('change', livereload.changed);
});

第4步:運行


 

能夠運行單獨的任務,例如

gulp default
gulp watch

也能夠運行整個任務

gulp

總結

  1. 安裝Node 
  2. 安裝gulp 
  3. 新建gulpfile.js文件 
  4. 運行

最後是我本身設置的項目文件路徑

|--/assets/--------壓縮後樣式和腳本存放的目錄
|--/images/--------圖片存放目錄
|--/javascripts/---腳本存放目錄
|--/stylesheets/---樣式存放目錄
|--/plugin/--------插件存放目錄
|--gulpfile.js

參考連接:http://markgoodyear.com/2014/01/getting-started-with-gulp/
相關文章
相關標籤/搜索