前言
软件程序存在的意义,是为了简化我们的生活和工作,利用程序可以代替我们完成一些生活工作中重复性的活动。构建工具的存在也是这个目的,简化我们的程序开发流程,并在一定程度上规范我们的开发工作。我所知道的第一个前端构建工具是grunt,未及深入学习,出现了gulp,论坛评价一边倒地赞扬gulp的优秀。最近又出现了webpack,替代browserify,目标是成为一个统一JavaScript前后端开发的构建工具,我也对webpack的官方文档做了一定学习,不过由于webpack和react贴得更近一些,而我暂时并未介入react及react native的学习开发,因此对其暂时搁置一段时间。个人认为webpack暂时不能完全取代gulp和grunt在前端构建的地位。因此今天就深入学习实践了一下gulp。
参考博客gulp详细入门教程,里面介绍很详细。还有一个很重要的工具cnpm
本篇主要对gulp的API进行介绍,gulp的API页面里有更多黑科技。gulp有4个API,分别是gulp.task,gulp.src,gulp.dest和gulp.watch,我们使用这四个API和众多的插件完成前端项目的构建工作。构建工作的开始当然是配置gulpfile.js文件了,这个文件在整个项目的根目录下面,我们接下来的代码全部是写在gulpfile.js中。
gulp.task
我们从gulp.task这个API开始谈起。话不多说,罗列usecase。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| gulp.task('somename', function() { });
gulp.task('mytask', ['array', 'of', 'task', 'names'], function() { });
gulp.task('build', ['array', 'of', 'task', 'names']);
gulp.task('default',['array', 'of', 'task', 'names'])
|
gulp.src
这里同样罗列usecase,这样更清楚。关于gul.src的options参数的接受,请自行进入API页面查询。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| *1.这里介绍下pipe函数,pipe函数灵感来源于*nix系统中管道的概念,上一级管道流出自动变为 * 下一级管道的流入。因此gulp.src获得的文件内容,在下一个pipe函数中变为传入内容由插件 * 函数如jade()/minify()来操作并将其执行结果流出转化为下一级pipe()的输入内容。 *2.学过正则或者shell的同学对*号不会陌生,这是一个通配符,匹配任何元字符。那么我们很容 * 易得出client/templates */ gulp.src('client/templates .pipe(jade()) .pipe(minify()) .pipe(gulp.dest('build/minified_templates'));
* 的a.js和bad.js *2.gulp.src接受单个字符串参数,也可以接受数组字符串参数 *3.!在程序中代表非,取反,因此!client/b*.js代表不匹配以b开头,以.js结尾的文件。此外还 * 有下面两个用法。 *4."**":匹配0个或多个子文件夹 例:src*.js(包含src的0个或多个子文件夹下的js文件); *5."{}":匹配多个属性 例:src/{a,b}.js(包含a.js和b.js文件) src * (src下的所有jpg/png/gif文件); */ gulp.src(['client
|
gulp.dest
usecase又来了。^…^
1 2 3 4 5 6
| gulp.src('./client/templates/*.jade') .pipe(jade()) .pipe(gulp.dest('./build/templates')) .pipe(minify()) .pipe(gulp.dest('./build/minified_templates'));
|
gulp.watch
顾名思义,看着,监视,监测。gulp.watch会监测被指定的文件,并在文件添加,修改内容,被重新命名,被删除的时候触发指定的函数,并且在函数中可以得到触发事件的类型
1 2 3 4 5 6 7
| * 2.event.type:触发事件的类型:added, changed, deleted 或者 renamed。 * 3.文件设置参考gulp.src中提及的规则 */ gulp.watch('js/**/*.js', function(event) { console.log('File ' + event.path + ' was ' + event.type + ', running tasks...'); });
|
总结
以上通过usecase介绍了gulp中四个API的用法,下一篇中会介绍gulp中一些常用的插件。