插件类型

Reduce中的插件根据发生作用的阶段可分为以下两类:

  • 打包插件:控制包生成的插件。
  • 后处理插件:包生成后的处理插件。

这里的“包”指的是vinyl对象。也就是说,第一类插件主要影响vinyl对象的生成,第二类插件则是对vinyl对象做进一步处理。

Reduce使用browserify处理JS,depsify处理CSS,两者都通过创建基于Node.js stream的管道来实现。 打包插件便可用来修改管道的处理逻辑。包括browserifydepsify的所有插件,分别作用于JS和CSS。

还有些插件两者都适用,如watchifycommon-bundle

Reduce默认使用了一些插件,不能再指定这些插件。

默认使用的打包插件:

后处理插件实际就是处理vinyl流的插件,包括所有gulp插件。

实际使用时需要确定插件是处理JS还是CSS。

由于CSS中可能存在url,部分插件不能使用。

譬如gulp-renamevinyl-fs#dest。(但可以对JS使用)

如何写插件

所有插件都是有如下声明的函数:

function myPlugin(b, opts) {
  // hack b.pipeline
}

b是一个browserifydepsify实例,opts是使用时传入的配置。 b.pipeline即是处理管道,它是一个labeled-stream-splicer实例,可以通过与数组类似的接口(如pushsplice等方法)进行操作。

具体实例参见这里