rollup插件概述

143 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情

rollup插件概述

首先,rollup插件是一个对象,需要遵循rollup的一些规定。rollup也为插件提供了对应的属性与一些钩子函数。在开发rollup插件之前可以先去插件列表中寻找是否有对应的插件 。

rollup插件的约定

首先来看rollup插件的约定,具体有几下几点 :

  • 插件应该有一个带有rollup-plugin-前缀的明确名称。
  • 中包含rollup-plugin关键字package.json。
  • 应该测试插件。我们推荐mochaava,它们支持开箱即用的 promise。
  • 尽可能使用异步方法。
  • 用英语记录您的插件。
  • 如果合适,请确保您的插件输出正确的源映射。
  • 如果您的插件使用“虚拟模块”(例如用于辅助函数),请在模块 ID 前加上\0. 这可以防止其他插件尝试处理它。

rollup 插件的属性值

rollup插件的属性值就一个:name,string类型值,插件的名称,用于错误消息和警告。

rollup 插件的hooks(钩子)

rollup 插件hooks 分为 build hooksoutput 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)。仅使用输出生成挂钩的插件也可以通过输出选项传入,因此仅针对某些输出运行。

输出生成阶段的第一钩是outputOptionsgenerateBundle产生的输出bundle.generate(...),writeBundle输出经成功生成bundle.write(...),或者renderError输出代期间的任何时候发生了错误。

流程图如下 :