# load
类型: | (id: string) => LoadResult |
---|---|
类别: | async, first |
上一个钩子: | 已解析加载的 id 的 resolveId 或 resolveDynamicImport。此外,此钩子可以通过调用 this.load 来从插件钩子中的任何位置触发预加载与 id 对应的模块 |
下一个钩子: | 如果未使用缓存,或者没有具有相同 code 的缓存副本,则为 transform,否则为 shouldTransformCachedModule |
type LoadResult = string | null | SourceDescription;
interface SourceDescription {
code: string;
map?: string | SourceMap;
ast?: ESTree.Program;
assertions?: { [key: string]: string } | null;
meta?: { [plugin: string]: any } | null;
moduleSideEffects?: boolean | 'no-treeshake' | null;
syntheticNamedExports?: boolean | string | null;
}
定义自定义加载器。返回 null 将延迟到其他 load 函数(最终默认从文件系统加载)。为了避免额外的解析开销,例如由于某些原因该钩子已经使用 this.parse 生成 AST,该钩子可以选择返回一个 { code, ast, map } 对象。ast 必须是一个具有每个节点的 start 和 end 属性的标准 ESTree AST。如果转换不移动代码,则可以通过将 map 设置为 null 来保留现有的源码映射。否则,你可能需要生成源映射。有关 源代码转换 的详细信息,请参见该部分。
如果 moduleSideEffects 返回 false,并且没有其他模块从该模块导入任何内容,则即使该模块具有副作用,该模块也不会包含在产物中。如果返回 true,则 Rollup 将使用其默认算法包含模块中具有副作用的所有语句(例如修改全局或导出变量)。如果返回 "no-treeshake",则将关闭此模块的除屑优化,并且即使该模块为空,也将在生成的块之一中包含它。如果返回 null 或省略标志,则 moduleSideEffects 将由第一个解析此模块的 resolveId 钩子,treeshake.moduleSideEffects 选项或最终默认为 true 确定。transform 钩子可以覆盖此设置。
assertions 包含导入此模块时使用的导入断言。目前,它们不会影响产物模块的呈现,而是用于文档目的。如果返回 null 或省略标志,则 assertions 将由第一个解析此模块的 resolveId 钩子或此模块的第一个导入中存在的断言确定。transform 钩子可以覆盖此设置。
有关 syntheticNamedExports 选项的影响,请参见 合成命名导出。如果返回 null 或省略标志,则 syntheticNamedExports 将由第一个解析此模块的 resolveId 钩子确定,或者最终默认为 false。transform 钩子可以覆盖此设置。
有关如何使用 meta 选项的 自定义模块元数据。如果此钩子返回 meta 对象,则该对象将与 resolveId 钩子返回的任何 meta 对象浅合并。如果没有钩子返回 meta 对象,则默认为一个空对象。transform 钩子可以进一步添加或替换该对象的属性。
你可以使用 this.getModuleInfo 在此钩子中查找 assertions、meta、moduleSideEffects 和 syntheticNamedExports 的先前值。