# resolveDynamicImport
类型: | ResolveDynamicImportHook |
---|---|
类别: | async, first |
上一个钩子: | 导入文件的 moduleParsed 钩子 |
下一个钩子: | 如果钩子解析出尚未加载的 id,则为 load,如果动态导入包含字符串并且未被钩子解析,则为 resolveId,否则为 buildEnd |
type ResolveDynamicImportHook = (
specifier: string | AcornNode,
importer: string,
options: { assertions: Record<string, string> }
) => ResolveIdResult;
TIP
返回类型 ResolveIdResult 与 resolveId 钩子相同。
为动态导入定义自定义解析器。返回 false 表示应将导入保留,不要传递给其他解析器,从而使其成为外部导入。与 resolveId 钩子类似,你还可以返回一个对象,将导入解析为不同的 id,同时将其标记为外部导入。
assertions 告诉你导入中存在哪些导入断言。即 import("foo", {assert: {type: "json"}}) 将传递 assertions: {type: "json"}。
如果动态导入作为字符串参数传递,则从此钩子返回的字符串将被解释为现有模块 id,而返回 null 将推迟到其他解析器,最终到达 resolveId。
如果动态导入未传递字符串作为参数,则此钩子可以访问原始 AST 节点以进行分析,并以以下方式略有不同:
- 如果所有插件都返回 null,则将导入视为 external,而不会发出警告。
- 如果返回字符串,则此字符串不会被解释为模块 id,而是用作导入参数的替换。插件有责任确保生成的代码有效。
- 要将此类导入解析为现有模块,仍然可以返回对象 {id,external}。
请注意,此钩子的返回值不会传递给 resolveId;如果需要访问静态解析算法,则可以在插件上下文中使用 this.resolve(source, importer)。