插件类型
Reduce中的插件根据发生作用的阶段可分为以下两类:
- 打包插件:控制包生成的插件。
- 后处理插件:包生成后的处理插件。
这里的“包”指的是vinyl对象。也就是说,第一类插件主要影响vinyl对象的生成,第二类插件则是对vinyl对象做进一步处理。
Reduce使用browserify处理JS,depsify处理CSS,两者都通过创建基于Node.js stream的管道来实现。 打包插件便可用来修改管道的处理逻辑。包括browserify和depsify的所有插件,分别作用于JS和CSS。
还有些插件两者都适用,如watchify、common-bundle。
Reduce默认使用了一些插件,不能再指定这些插件。
默认使用的打包插件:- watchify2。提供watch功能。
- common-bundle。提供打包策略的订制功能。
- reduce-css-postcss。支持PostCSS预处理。
后处理插件实际就是处理vinyl流的插件,包括所有gulp插件。
实际使用时需要确定插件是处理JS还是CSS。
由于CSS中可能存在url,部分插件不能使用。
譬如gulp-rename,vinyl-fs#dest。(但可以对JS使用)如何写插件
所有插件都是有如下声明的函数:
function myPlugin(b, opts) {
// hack b.pipeline
}
b
是一个browserify或depsify实例,opts
是使用时传入的配置。
b.pipeline
即是处理管道,它是一个labeled-stream-splicer实例,可以通过与数组类似的接口(如push
、splice
等方法)进行操作。
具体实例参见这里。