gulp的學習
Gulp Tutorial
Gulp: The streaming build system
gulp是前端開發過程中一種基於流的代碼構建工具,是自動化項目的構建利器;
她不僅能對網站資源進行優化,而且在開發過程中很多重複的任務能夠使用正確的工具自動完成;
使用她,不僅可以很愉快的編寫代碼,而且大大提高我們的工作效率。
項目構建是指項目上線之前對項目源代碼進行一係列處理,使其以最佳的形式運行於線上服務器。
常見處理任包括以下幾方麵:
- 模塊化開發可以實現功能的複用並解決模塊間的依賴關係,但帶來好處的同時也使得功能代碼的碎片化(若幹文件)程度增加。
- 使用less、sass等預處理器,可以降低CSS的維護成本,最終需要將這些預處理器編譯成css文件;
- 對靜態資源(css、js、html、images)壓縮合並可以提升網頁打開速度,提高性能;
以上任務完如果完全靠手動來完成是非常耗時耗力的且容易出錯,實際開發通常借助構建工具來實現。
所謂構建工具是指通過一係簡單配置就可以幫我們實現合並、壓縮、校驗、預處理等一係列任務的軟件工具。
常見的構建工具包括:Grunt、Gulp、F.I.S(百度出品)、webpack
等。
Gulp是基於Nodejs開發的一個構建工具,借助gulp插件可以實現不同的構建任務,
其以簡潔的配置和卓越的性能成為目前主流的構建工具。
Introduction
- 官方:https://gulpjs.com/
- 中文官網:https://www.gulpjs.com.cn/
- npm:https://www.npmjs.com/package/gulp
- Github:https://github.com/gulpjs/gulp
- Gitbook:https://wizardforcel.gitbooks.io/gulp-doc/content/2.html
Getting Started
官方文檔:https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md
一:Install the gulp command
在項目中使用 gulp 首先需要確保全局有 gulp-cli 環境,如果有就不需要執行下麵的命令了。
# npm install --global gulp-cli
yarn global add gulp-cli
二:Install gulp in your devDependencies
# npm install --save-dev gulp
yarn add -D gulp
三:Create a file called gulpfile.js in your project root with these contents:
var gulp = require('gulp');
gulp.task('default', function() {
console.log('hello gulp')
})
四:Test it out: Run the gulp command in your project directory:
gulp
API Documentation
- gulp.task
- gulp.src
- gulp.dest
- gulp.watch
gulp.task(name [, deps] [, fn])
作用:定義各種不同的任務
- gulp.task(name, fn)
- gulp.task(name, deps, fn)
- gulp.task(name, fn(cb))
- gulp.task(name, deps, fn(cb))
一:普通任務
gulp.task('a', function () {
console.log('1 aaa')
})
gulp.task('b', function () {
console.log('2 bbb')
})
二:任務之間的依賴
gulp.task('a', function (cb) {
setTimeout(function () {
console.log('1 aaa')
cb()
}, 1000)
})
// b 任務依賴的 a 任務中的回調函數如果不調用,b 任務是不會執行的
gulp.task('b', ['a'], function () {
console.log('2 bbb')
})
三:gulp 流控製
gulp.task('a', function () {
// 當任務中是一個 gulp 流的時候則需要通過 return 來保證依賴中的執行順序
return gulp.src()
.pipe()
// ...
})
gulp.task('b', ['a'], function () {
// doSomething
})
gulp.src(globs[, options])
gulp教程之gulp中文API:https://www.ydcss.com/archives/424
作用:根據路徑(字符串或數組)讀取需要構建的資源
globs
需要處理的源文件匹配符路徑。
類型(必填):String or StringArray,通配符路徑匹配示例:
-
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文件);
options.base
options.base:類型:String 設置輸出路徑以某個路徑的某個組成部分為基礎向後拚接,具體看下麵示例:
gulp.src('client/js/*/.js')
.pipe(minify())
.pipe(gulp.dest('build')) // Writes 'build/somedir/somefile.js'
gulp.src('client/js/*/.js', { base: 'client' })
.pipe(minify())
.pipe(gulp.dest('build')) // Writes 'build/js/somedir/somefile.js'
gulp.dest(path[, options])
作用:構建任務完成後資源存放的路徑
gulp.watch(glob[, opts], tasks)
監視指定資源的改動,然後可以調用響應的任務處理
gulp.watch(glob [, opts, cb])
常用插件
插件名稱 | 作用 |
---|---|
del | 刪除文件或文件夾 |
gulp-less | 編譯LESS文件 |
gulp-rname | 重命名文件 |
gulp-imagemin | 圖片壓縮 |
gulp-uglify | 壓縮Javascript |
gulp-concat | 合並 js 文件 |
gulp-concat-css | 合並 css 文件 |
gulp-cssnano | 壓縮 css |
gulp-htmlmin | 壓縮HTML |
gulp-nunjucks | 模板引擎 |
gulp-rev | 添加版本號 |
gulp-rev-collector | 內容替換 |
gulp-useref | gulp-if |
gulp-load-plugins | 依賴自動加載 |
gulp-useref | 自動合並打包處理 |
gulp-wrap | 包裝內容 |
gulp-angular-templatecache | AngularJS 模板緩存 |
browser-sync | 和 gulp 配合使用實現文件改變執行某個任務後自動刷新 |
yargs | 獲取命令行參數 |
gulp-if | 根據判斷條件執行某個插件 |
http-proxy-middleware | http 代理插件 |
gulp 實戰之:高級寫頁麵
實現 HTML 模板功能,例如公共 HTML 頭部和底部,提供可維護性,
以及實現 HTML 自動壓縮,css 壓縮,js 壓縮,或者合並。
最後更新:2017-11-15 15:34:46