用自動化構建工具加強你的工做流程!css
官網:https://gulpjs.com/ html
中文網:https://www.gulpjs.com.cn/webpack
基於Nodejs的自動任務運行器,採用流的方式,借鑑了Unix操做系統的管道(pipe)思想,僅在最後一步才輸出文件到磁盤,快速高效。web
官方僅提供5個API(4.0又增長了幾個),利用這5個API咱們能夠完成測試、檢查、合併、壓縮、格式化、自動刷新、部署、監聽等任務。並且由於只有5個API,上手也是特別簡單。shell
gulp.src(globs[, options])
匹配須要處理的源文件npm
可使用的模式:json
「src/a.js」:指定具體文件; 「*」:匹配全部文件 例:src/*.js(包含src下的全部js文件); 「**」:匹配0個或多個子文件夾 例:src/**/*.js(包含src的0個或多個子文件夾下的js文件); 「{}」:匹配多個屬性 例:src/{a,b}.js(包含a.js和b.js文件) src/*.{jpg,png,gif}(src下的全部jpg/png/gif文件); 「!」:排除文件 例:!src/a.js(不包含src下的a.js文件);
// 例 gulp.src(['style/**/*.scss','!style/{extend,page}/*.scss'])
options.buffer: 類型:Boolean 默認:true 設置爲false,將返回file.content的流而且不緩衝文件,處理大文件時很是有用; options.read: 類型:Boolean 默認:true 設置false,將不執行讀取文件操做,返回null; options.base: 類型:String 設置輸出路徑以某個路徑的某個組成部分爲基礎向後拼接
gulp.dest(path[, options])
任務完成後文件輸出的路徑gulp
options.cwd: 類型:String 默認:process.cwd():輸出目錄的 cwd 參數,只在所給的輸出目錄是相對路徑時候有效; options.mode: 類型:String 默認:0777 八進制權限字符,用以定義全部在輸出目錄中所建立的目錄的權限;
// 例 .pipe(gulp.dest('./build/minified_templates'));
gulp.task(name[, deps], fn)
定義一個任務數組
//callback // 在 shell 中執行一個命令 var exec = require('child_process').exec; gulp.task('jekyll', function(cb) { // 編譯 Jekyll exec('jekyll build', function(err) { if (err) return cb(err); // 返回 error cb(); // 完成 task }); }); //返回stream gulp.task('somename', function() { var stream = gulp.src('client/**/*.js') .pipe(minify()) .pipe(gulp.dest('build')); return stream; }); //返回promise var Q = require('q'); gulp.task('somename', function() { var deferred = Q.defer(); // 執行異步的操做 setTimeout(function() { deferred.resolve(); }, 1); return deferred.promise; });
gulp.watch(glob [, opts], tasks)
或 gulp.watch(glob [, opts, cb])
監視文件,而且能夠在文件發生改動時候執行指定任務promise
gulp.task('watch1', function () { gulp.watch('less/**/*.less', ['testLess']); }); gulp.task('watch2', function () { gulp.watch('js/**/*.js', function (event) { console.log('File ' + event.path + ' was ' + event.type + ', running tasks...'); }); });
gulp.start(taskName1,taskName2,...)
執行指定任務
npm install --global gulp
npm install --save-dev gulp
在文件根目錄建立一個名爲gulpfile.js的文件。
var gulp = require('gulp'); gulp.task('default', function() { // 將你的默認的任務代碼放在這 });
根據本身須要,安裝插件而且配置相應的任務。
如下經過幾個案例來學習:
var gulp = require('gulp'), del = require('del'); gulp.task('clear', function (cb) { del(['static/css', 'static/html', 'static/js', 'static/picture', 'static/skin', 'tour.xml'], cb); });
var gulp = require('gulp'), less = require('gulp-less'), cleanCSS = require('gulp-clean-css'); gulp.task('runLess', function () { gulp.src('src/less/*.less') .pipe(less()) .pipe(cleanCSS({ compatibility: 'ie8', //兼容 keepSpecialComments: '*' //是否保留前綴 })) .pipe(gulp.dest('src/css')); });
var gulp = require('gulp'), changed = require('gulp-changed'), imagemin = require('gulp-imagemin'); gulp.task('picmin', function () { return gulp.src('./dev/static/picture/**/*.{jpg,jpeg,png,gif,ico,JPG}') .pipe(changed('./static/picture')) //緩存起來,只有圖片變更時才壓縮,提升效率 .pipe(imagemin({ optimizationLevel: 5, //類型:Number 默認:3 取值範圍:0-7(優化等級) progressive: true, //類型:Boolean 默認:false 無損壓縮jpg圖片 interlaced: true, //類型:Boolean 默認:false 隔行掃描gif進行渲染 })) .pipe(gulp.dest('./static/picture')); });
var gulp = require('gulp'), browserSync = require('browser-sync').create(); gulp.task('server', function () { browserSync.init({ server: { baseDir: './', // 在 dist 目錄下啓動本地服務器環境,自動啓動默認瀏覽器 proxy: '10.6.63.234' } }); });
能夠定一個名爲default的task,這個task就是默認的任務(直接運行gulp便可),能夠在這裏運行其餘的任務,我的習慣把整套構建流程都放在這裏調用。
插件能夠在網上搜索或者在npm官網查找,通常以gulp開頭,每一個插件的配置有所不一樣,能夠在插件介紹頁查看,就不一一介紹了。
在命令行中運行任務
gulp taskName //運行指定名字的task gulp //運行默認任務
能夠在package.json的scripts中配置經常使用操做,而後經過npm run 方式調用
參見:https://www.gulpjs.com.cn/doc...