记录一下从开始到写自己的插件的学习过程

插件开发约定

rollup插件实际上就是返回一个对象,下面是rollup插件的约定:

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

    插件的属性值

    rollup的插件属性就只用一个: name (string类型)是插件的名称 用于报错的显示

    插件的hooks

    分为build hooksoutput generation hooks两种.分别为构建和生产时的各个阶段调用的函数

    build hooks

    官方解释:

    build hooks是在构建阶段运行,我理解就是当rollup.rollup(inputOptions)时运行,这些hooks主要作用就是在处理之前定位,提供和转换输入文件。钩子可以影响构建的运行方式,有不同种类的hooks(以下用钩子来替代hooks了):

    • async : 异步钩子,此类型的hooks需要返回一个promise resolve的值。否则会被标记成sync类型
    • sync : 同步钩子
    • first : 当插件执行此类型钩子时,此钩子一直会顺序的执行,直到返回一个null或者undefind
    • sequential : 这个类型钩子会按指定顺序运行,如果其中某个钩子是异步的,之后的钩子会等当前钩子解析后再执行
    • parallel:这种类型的钩子和上面的sequential类型一样,不通点在与如果顺序执行时某个钩子时异步的,后续钩子不需等待,可以并行执行。

    image.png

Output Generation Hooks

第一个插件demo

  1. export default function removeConsole() {
  2. return {
  3. name:"remove-console",
  4. transform(code,id) {
  5. const reg = /console\.log\(.*\)/ig;
  6. return code.replace(reg,"");
  7. }
  8. }
  9. }