gulp是一個自動化構建工具,在項目開發階段或部署階段執行一些自動化任務。css
gulp能夠幫咱們將書寫的代碼比那位真正可在生產環境中部署的代碼,是實現自動化工做流的主要工具。html
gulp跟grunt同樣支持跨平臺,即支持跨平臺不是gulp獨有的優點,不一樣在於grunt須要Gruntfile.js,gulp須要Gulpfile.js,最核心的不一樣之處在於,gulp是以流爲核心的,而grunt是以配置加上文件io爲核心的。node
注意,由於是國外資源,安裝時可以使用cnpm淘寶鏡像來安裝。css3
如下是gulpfile.js示例:npm
// 定義一個個task,task就是普通的函數 function task1() { console.log('我是task1!'); return;// 必須有return,不然gulp會認爲任務沒有執行完畢 } function task2() { console.log('我是task2!'); return;// 必須有return,不然gulp會認爲任務沒有執行完畢 } function task3() { console.log('我是task3!'); return;// 必須有return,不然gulp會認爲任務沒有執行完畢 } // 向外暴露 exports.t1 = task1; exports.task2 = task2; exports.t3 = task3; // 外部使用就是gulp t1 // gulp task2 // 默認暴露 exports.default = task3;// 直接在命令行gulp直接運行
如下是使用流的gulpfile.js的代碼示例:json
// 引入gulp文件,require表示引入,解構出三個函數 const {src, dest, pipe} = require("gulp"); // 定義task function task1() { // src表示設置流的源頭 return src("./foo/**/*.txt") // 這裏的一個*表明任意名字,**表明任意目錄,也就是全部目錄,全部文件 // pipe表示管道,pipe()裏面寫函數 // dest表示設置流的終點 .pipe(dest("./bar")); } // 暴露 exports.default = task1;
gulp使用各類插件的示例:gulp
// 引入gulp文件,require表示引入,解構出三個函數 const {src, pipe, dest, parallel} = require('gulp'); // 引入插件 const uglify = require('gulp-uglify'); const concat = require('gulp-concat'); const autoprefixer = require('gulp-autoprefixer'); const csso = require('gulp-csso'); const htmlMinify = require('gulp-html-minify'); const htmlReplace = require('gulp-html-replace'); const base64 = require('gulp-base64'); function js() { return src('./app/js/**/*.js') .pipe(uglify()) .pipe(concat('all.min.js')) .pipe(dest('./dest/js')); } function css() { return src('./app/css/**/*.css') .pipe(base64({ extentions: ['png'], maxImageSize: 500*1024 // bytes 轉換圖片的最大尺寸 })) .pipe(autoprefixer({ browsers: ['last 2 version', '> 5%', 'firefox > 10', 'ie 6-8'] })) .pipe(csso()) .pipe(concat('all.min.css')) .pipe(dest('./dest/css')); } function html() { return src('./app/index.html') .pipe(htmlReplace({ css: './css/all.min.css', // 須要在html文件中的link標籤開頭添加<!-- bulid:css -->和結尾添加<!-- endbuild --> js: './js/all.min.js' //js和css同理,改成bulid:js })) .pipe(htmlMinify()) .pipe(dest('./dest')); } // 暴露 exports.default = parallel(js, css, html);