1. Gulp
任务自动管理工具
合并文件、压缩代码、检查语法错误、将Sass代码转成CSS代码等等
1.1. 原理
Gulp 通过 流模块
的方式 pipe() 到其它插件或者写到文件中,不需要频繁的生成临时文件
1.1.1. Stream VS Buffer
Stream: 在一个应用程序中,流是一组有序的、有起点和终点的字节数据的传输手段。 Buffer: 用于创建一个专门存放二进制数据的缓存区
在后端中应用,因为在后端与前端、后端的IO中,很大机会会出现文件太大,不能一次性读取的问题。因此在前端中使用的方法:整体读取后再进行操作,会导致程序的等待时间过长,因此,流操作(stream)便营运而生。
在数据传输过程中,如果需要把其中一段Stream截取并且进行修改查看,则需要Buffer类来进行协助,并且转化成其他的人类可理解对象
file.contents 以 buffer 方式存储,有些情况不适合用流的方式处理,譬如文件倒序时必须读取整个文件内容才能实现。
file.contents 以 stream 方式存储
1.1.2. gulp.src()
gulp.src()方法正是用来获取流的,但要注意这个流里的内容不是原始的文件流,而是一个虚拟文件对象流(Vinyl files),这个虚拟文件对象中存储着原始文件的路径、文件名、内容等信息,可以用这个方法来读取你需要操作的文件就行了。
options.buffer 默认值是 true,所以默认以 buffer 方式返回 file.contents
1.2. 安装
$ npm install --global gulp
1.3. 插件
1.4. 只处理修改过的文件
有多种方法实现,这里推荐用 方法一
1.4.1. 方法一
gulp.watch + gulp-changed + gulp-changed-in-place
gulp-changed: 用于处理后的结果输出到不同文件的情况。 gulp-changed-in-place: 用于处理后的结果输出到当前文件的情况
参考 http://www.gulpjs.com.cn/docs/recipes/only-pass-through-changed-files/
1.4.2. 方法二
gulp.watch + gulp-cached + gulp-remember
参考 http://www.gulpjs.com.cn/docs/recipes/incremental-builds-with-concatenate/
1.4.3. 方法三
1.5. 文件加后缀
gulp-rev 文件加后缀并生成 manifest 文件 + gulp-rev-collector 根据 gulp-rev 生成的 manifest 文件修改所有依赖的文件
1.6. css 自动加前缀
1.7. Questions
1.7.1. gulp.watch 监控不到文件的增加
监听路径不要以 './' 开头