有时,内置的Processor没法满足我们的需求。EDP BUILD的配置文件
是一个node module
。我们可以很灵活的在配置文件
中自定义自己的Processor。在下面的章节里,我们简单介绍了Processor的运行过程
,然后提供了通过Object自定义processor
和从AbstractProcessor继承自定义processor
的例子
Processor的运行过程
构建过程中,构建主模块通过Processor
的实例方法start(processContext, callback)
,与Processor
发生交互。Processor
执行完成后,调用由构建主模块传入的callback
,通知主模块当前Processor
处理已经完成。
Processor
的start
方法做三件事情:
- 调用实例方法
beforeAll(processContext)
。该方法默认实现为根据files属性选取当前processor要处理的文件集
- 根据选取的文件集,挨个调用实例方法
process(file, processContext, callback)
- 调用实例方法
afterAll(processContext)
。该方法默认不做任何事情,需要后续处理的processor可以实现该方法
大多数情况下,自定义自己的Processor都是为了对文件内容做一些自己的处理,这时候只需要重写process方法。我们来看看process
方法的参数:
file
FileInfo
。EDP Build在读入文件时,会把文件包装成FileInfo
对象,你可以通过setData
方法更改数据内容。最后,EDP Build会根据这个FileInfo
对象的状态进行输出。
该对象包含以下属性:
- data - 文件数据,文本文件时data为
string
,二进制文件时data为Buffer
- extname - 文件扩展名
- path - 文件路径,相对于构建目录
- fullPath - 文件完整路径
- fileEncoding - 文件的文本编码类型
- outputPath - 输出路径,修改此项可以更改文件输出目标
processContext
ProcessContext
。构建处理运行时,该对象包含一些运行的基本环境信息。
- baseDir - 构建基础目录
- exclude - 构建排除文件列表
- outputDir - 构建输出目录
- fileEncodings - 文件编码表
callback
function
。当前文件处理完成的回调函数。
由于处理过程可能是异步的(比如less只提供了异步编译接口),所以,处理完成后需要手工调用callback
,告诉EDP当前文件的处理已经完成
。
通过Object自定义processor
下面,我们通过编写一个简单的StringReplacer
,介绍了如何自定义自己的processor:
只需要一步:在getProcessor方法中,使用JS plain Object
getProcessors
方法返回的是处理器实例数组。如果其中的项是一个JS plain Object
,构建主模块会自动让其具有默认的行为。
自定义Processor的Object中,我们必须包含name
项,EDP在输出当前Build的过程时,会用到这个属性。我们可以根据自己的需求,选择复写start
、process
、beforeAll
、afterAll
。
发布评论