build阶段的钩子有:
- options:async+sequential类型。可替换或操作传递给rollup.rollup()的选项。返回null的时候将不做任何替换。
- buildStart:async+parallel类型。rollup.rollup()时执行。可以用来查看rollup.rollup的选项,此时完成了选项的处理并且包含了默认值。
- resolveId: async, first类型。解析入口点的ID,或者解析一个import的ID,或者作为动态导入的回调用,还可以通过this.emitFile或者this.resove手动触发。
- load:加载当前处理的文件
- transform:转换加载的文件
- moduleParsed:文件被处理和解析后触发
- resolveDynamicImport:处理动态导入
- buildEnd:async, parallel类型。build阶段的最后一个钩子,如果构建过程中出现任何错误,会传递给此钩子。
- closeBundle:出现构建错误时会在buildEnd后调用,或者执行bundle.close时调用。
generate阶段的钩子的机制和build阶段的钩子相同,但是可以分开执行bundle.generate(outputOptions)或者bundle.write(outputOptions)。
- outputOptions:
- renderStart:在bundle.generate()或者bundle.write()执行时被调用,可以用来访问传递给上述两个方法的选项
- banner/footer:字符串类型或者返回字符串类型的函数。就是output的banner/footer。
- intro
- outro
- renderDynamicImport:动态导入
- augmentChunkHash:增加单个chunk的hash
- resolveFileUrl
- resolveImportMeta
- generateBundle
- writeBundle
- renderError
其他钩子:
- watchChange:可以在任何阶段执行
- closeWatcher:可以在任何阶段执行
rollup中模块(文件)的id就是文件地址,所以类似resolveID这种就是解析文件地址的意思,我们可以返回我们想返回的文件id(也就是地址,相对路径、决定路径)来让rollup加载
rollup.rollup分为以下几步:
- 配置收集、标准化
- 文件分析
- 源码编译,生成ast
- 模块生成
- 依赖解析
- 过滤净化
- 产出chunks
主要通用模块以及含义
- Graph: 全局唯一的图,包含入口以及各种依赖的相互关系,操作方法,缓存等。是rollup的核心
- PathTracker: 无副作用模块依赖路径追踪
- PluginDriver: 插件驱动器,调用插件和提供插件环境上下文等
- FileEmitter: 资源操作器
- GlobalScope: 全局作用局,相对的还有局部的
- ModuleLoader: 模块加载器
- NodeBase: ast各语法(ArrayExpression、AwaitExpression等)的构造基类