Gulp API 语法说明
gulp
常用的五个 API
方法: gulp.task
,gulp.src
,gulp.dest
,gulp.watch
,和gulp.run
。
一、gulp.task
注册任务,语法格式如下:
gulp.task(name[, deps], fn)
name
:类型(string
,必填),任务名称。deps
:类型(Array
,可选),本次任务运行时要执行的其他依赖的任务列表(优先于主任务执行)。fn
:类型(Functon
,必填),任务体,即该任务所执行的操作。
代码示例:
gulp.task('taskname', ['array', 'of', 'task', 'names'], function() {
return gulp.src('filename')
.pipe(...)
.pipe(...)
// until the last step
.pipe(...);
});
在上面的代码示例中,演示了Gulp任务体的基本执行模式。
可以这么理解——首先获取要处理的文件,传递给下一个环节处理,然后把返回的结果继续传递给下一个环节...直到所有环节完成。
其中 pipe
就是 stream
模块里负责传递流数据的方法而已(不是gulp的方法),至于最开始的return
则是把整个任务的 stream
对象返回出去,以便任务和任务之间可以依次传递执行。
下面的代码示例仅在控制台中打印 Hello gulp!
:
gulp.task('hello', function(){
console.log('Hello gulp!');
});
默认 task
默认 task 是指——当在命令行中仅敲入 glup
并回车就会被默认执行的任务。该任务约定命名为 default
:
gulp.task('default', function(){
// Your default task
});
二、gulp.src
指明源文件路径,语法格式如下:
gulp.src(globs[, options])
globs
:类型(string
orArray
,必填),指定源文件的路径,可以是单个路径,也可以是个路径数组。options
:类型(Object
,可选),配置选项。options.buffer
:类型(Boolean
,默认:true),设置为false,将返回file.content的流并且不缓冲文件,处理大文件时非常有用。options.read
:类型(Boolean
,默认:true),设置为false,将不执行读取文件操作,并返回file.content为null。options.base
:类型(String
,默认:''),设置输出路径以源文件路径的某个组部分为基础向后进行拼接,如果该值不是源文件路径的一部分,那么最终的输出路径为源文件路径。
代码示例:
gulp.task('sass', function() {
return gulp.src('./scss/abc/somename.scss')
.pipe(sass())
.pipe(gulp.dest('dist')); // Writes: './dist/somename.css'
});
gulp.task('sass', function() {
return gulp.src('./scss/abc/somename.scss', {base: ''})
.pipe(sass())
.pipe(gulp.dest('dist')); // Writes: './dist/somename.css'
});
gulp.task('sass', function() {
return gulp.src('./scss/abc/somename.scss', {base: 'scss/'})
.pipe(sass())
.pipe(gulp.dest('dist')); // Writes: './dist/abc/somename.css'
});
gulp.task('sass', function() {
return gulp.src('./scss/abc/somename.scss', {base: '...'})
.pipe(sass())
.pipe(gulp.dest('dist')); // Writes: './scss/abc/somename.css'
});
globs 参数常用字符串
js/app.js
:精确匹配文件。js/*.js
:仅匹配js
目录下的所有后缀为.js
的文件。js/**.js
:匹配js
目录及其子目录下所有后缀为.js
的文件。js/**/*.js
:匹配js
目录及其后代目录下所有后缀为.js
的文件。js/{a,b}.js
:匹配js
目录下的a.js
或者b.js
。*.+(js|css)
:匹配根目录下所有后缀为.js
或者.css
的文件。!js/app.js
:从匹配结果中排除js/app.js
,这种方法在你想要匹配除了特殊文件之外的所有文件时非常管用。
!
匹配符通常需要通过数组格式来组合使用,才能达到预期目的。
例如,在 js
目录下包含了压缩和未压缩的 JavaScript
文件,现在我们想要创建一个任务来压缩还没有被压缩的文件,我们需要先匹配目录下所有的 JavaScript
文件,然后排除后缀为 .min.js
的文件:
gulp.src(['js/*.js', '!js/*.min.js'])
通配符说明
*
:匹配任意数量的字符,除了/
。?
:匹配单个字符,除了/
。**
:匹配任意数量的字符,包括/
。{,}
:以逗号分隔的“或”表达式列表。+(|)
:以|分隔的“或”表达式列表。!
:匹配取反。
三、gulp.dest
指明任务处理后的目标输出路径,语法格式如下:
gulp.dest(path[, options])
path
:类型(string
orFunction
,必填),目标输出路径,可以是字符串,也可以是一个返回文件夹路径的函数。options
:类型(Object
,可选)配置选项。options.cwd
:类型(string
),默认值:process.cwd()
,即前脚本的工作目录的路径,当文件输出路径为相对路径将会用到。options.mode
:类型(string
),默认值:0777
,用于指定被创建文件夹的权限。
关于相对路径:
./
:相对于当前目录。../
:相对于上一级目录。
代码示例:
gulp.src('./client/templates/*.jade')
.pipe(jade())
.pipe(gulp.dest('./build/templates'))
.pipe(minify())
.pipe(gulp.dest('./build/minified_templates'));
四、gulp.watch
监视文件的变化并运行相应的任务。
语法格式(一):
gulp.watch(glob[, opts], tasks)
glob
:类型(string
orArray
,必填),指定源文件的路径,可以是单个路径,也可以是个路径数组。路径匹配和上述gulp.src()
方法路径匹配的模式一样。opts
:类型(Object
,可选),配置选项,具体可参考github.com/shama/gaze。tasks
:类型(Array
,必填),监听到文件变化后,需要被执行的任务的名称所组成的数组。
代码示例:
var watcher = gulp.watch('js/**/*.js', ['uglify','reload']);
watcher.on('change', function(event) {
console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});
语法格式(二):
gulp.watch(glob[, opts, cb])
cb(event)
:类型(Function
,可选),监听到文件的变化后,被执行的回调函数。会传递出一个对象类型的event参数。
cb回调函数的event
参数:
event.type
:类型(string
),事件类型——added
(添加)、changed
(变更)、deleted
(删除)。event.path
:类型(string
),发生变更的文件的路径。
代码示例:
gulp.watch('js/**/*.js', function(event) {
console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});
五、gulp.run
运行指定的任务列表,语法格式如下:
gulp.run(task1, task2, ..., taskn)
代码示例:
gulp.run('lint', 'sass', 'scripts');