Grunt靠边,全新的建构工具来了。Gulp的code-over-configuration不只让撰写任务(tasks)更加容易,也更好阅读及维护。
Glup使用node.js串流(streams)让建构更快速,不须写出资料到硬盘的暂存档案/目录。如果你想了解更多有关串流–虽然不是必须的–你可以阅读这篇文章。Gulp利用来源档案当作输入,串流到一群外挂(plugins),最后取得输出的结果,并非配置每一个外挂的输入与输出–就像Grunt。让我们来看个范例,分别在Gulp及Grunt建构Sass:
Grunt: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | sass: {
dist: {
options: {
style: 'expanded'
},
files: {
'dist/assets/css/main.css' : 'src/styles/main.scss' ,
}
}
},
autoprefixer: {
dist: {
options: {
browsers: [
'last 2 version' , 'safari 5' , 'ie 8' , 'ie 9' , 'opera 12.1' , 'ios 6' , 'android 4'
]
},
src: 'dist/assets/css/main.css' ,
dest: 'dist/assets/css/main.css'
}
},
grunt.registerTask( 'styles' , [ 'sass' , 'autoprefixer' ]);
|
Grunt需要各别配置外挂,指定其来源与目的路径。例如,我们将一个档案作为外挂Sass的输入,并储存输出结果。在设置Autoprefixer时,需要将Sass的输出结果作为输入,产生出一个新档案。来看看在Gulp中同样的配置: Gulp: 1 2 3 4 5 6 | gulp.task( 'sass' , function () {
return gulp.src( 'src/styles/main.scss' )
.pipe(sass({ style: 'compressed' }))
.pipe(autoprefixer( 'last 2 version' , 'safari 5' , 'ie 8' , 'ie 9' , 'opera 12.1' , 'ios 6' , 'android 4' ))
.pipe(gulp.dest( 'dist/assets/css' ))
});
|
在Gulp中我们只需要输入一个档案即可。经过外挂Sass处理,再传到外挂Autoprefixer,最终取得一个档案。这样的流程加快建构过程,省去读取及写出不必要的档案,只需要最终的一个档案。 所以,有趣了,现在要?让我们开始安装gulp并建立一个基本的gulpfile,包含几个核心任务来作为入门吧。
安装gulp 深入设置任务之前,需先安装gulp: 这会将gulp安装到全域环境下,让你可以存取gulp的CLI。接著,需要在本地端的专案进行安装。cd 到你的专案根目录,执行下列指令(请先确定你有package.json 档案): 1 | $ npm install gulp --save-dev
|
上述指令将gulp安装到本地端的专案内,并纪录于package.json 内的devDependencies 物件。
安装gulp外挂接著安装一些外挂,完成下列任务: 执行下列指令来安装这些外挂: 1 | $ npm install gulp-ruby-sass gulp-autoprefixer gulp-minify-css gulp-jshint gulp-concat gulp-uglify gulp-imagemin gulp-clean gulp-notify gulp-rename gulp-livereload gulp-cache --save-dev
|
指令将会安装必要的外挂,并纪录于package.json 内的devDependencies 物件。完整的gulp外挂清单可以在这裡找到。
载入外挂接下来,我们需要建立一个gulpfile.js 档案,并且载入这些外挂: 1 2 3 4 5 6 7 8 9 10 11 12 13 | var gulp = require( 'gulp' ),
sass = require( 'gulp-ruby-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' ),
clean = require( 'gulp-clean' ),
concat = require( 'gulp-concat' ),
notify = require( 'gulp-notify' ),
cache = require( 'gulp-cache' ),
livereload = require( 'gulp-livereload' );
|
呼!看起来比Grunt有更多的事要做,对吧?Gulp外挂跟Grunt外挂有些许差异–它被设计成做一件事并且做好一件事。例如;Grunt的imagemin利用快取来避免重複压缩已经压缩好的图片。在Gulp中,这必须透过一个快取外挂来达成,当然,快取外挂也可以拿来快取其他东西。这让建构过程中增加了额外的弹性层面。蛮酷的,哼? 我们也可以像Grunt一样自动载入所有已安装的外挂,但这不在此文章目的,所以我们将维持在手动的方式。
|