开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情
rollup插件概述
首先,rollup插件是一个对象,需要遵循rollup的一些规定。rollup也为插件提供了对应的属性与一些钩子函数。在开发rollup插件之前可以先去插件列表中寻找是否有对应的插件 。
rollup插件的约定
首先来看rollup插件的约定,具体有几下几点 :
- 插件应该有一个带有rollup-plugin-前缀的明确名称。
- 中包含rollup-plugin关键字package.json。
- 应该测试插件。我们推荐mocha或ava,它们支持开箱即用的 promise。
- 尽可能使用异步方法。
- 用英语记录您的插件。
- 如果合适,请确保您的插件输出正确的源映射。
- 如果您的插件使用“虚拟模块”(例如用于辅助函数),请在模块 ID 前加上\0. 这可以防止其他插件尝试处理它。
rollup 插件的属性值
rollup插件的属性值就一个:name,string类型值,插件的名称,用于错误消息和警告。
rollup 插件的hooks(钩子)
rollup 插件hooks 分为 build hooks和output generation hooks。hooks就是在构建和生产时的各个阶段调用的函数。
build hooks
build hooks是在构建阶段运行,我理解就是当rollup.rollup(inputOptions)时运行,这些hooks主要作用就是在处理之前定位,提供和转换输入文件。钩子可以影响构建的运行方式,有不同种类的hooks(以下用钩子来替代hooks了):
- async : 异步钩子,此类型的hooks需要返回一个promise resolve的值。否则会被标记成sync类型
- sync : 同步钩子
- first : 当插件执行此类型钩子时,此钩子一直会顺序的执行,直到返回一个bull或者undefind
- sequential : 这个类型钩子会按指定顺序运行,如果其中某个钩子是异步的,之后的钩子会等当前钩子解析后再执行
- parallel:这种类型的钩子和上面的sequential类型一样,不通点在与如果顺序执行时某个钩子时异步的,后续钩子不需等待,可以并行执行。
这几种类型的钩子官方文档上游明确说明,并且有流程图 ,如下所示 :
构建阶段的第一个钩子是options,最后一个总是buildEnd。如果出现构建错误,closeBundle将在此之后调用。此处不再贴出具体hooks的含义与用法,详见文档。
Output Generation Hooks
可以提供有关生成的包的信息,并在完成后修改构建。它们与Build Hooks 的工作方式和类型相同,但在每次调用bundle.generate(outputOptions)or 时分别调用bundle.write(outputOptions)。仅使用输出生成挂钩的插件也可以通过输出选项传入,因此仅针对某些输出运行。
输出生成阶段的第一钩是outputOptions,generateBundle产生的输出bundle.generate(...),writeBundle输出经成功生成bundle.write(...),或者renderError输出代期间的任何时候发生了错误。
流程图如下 :