# this.resolve
类型: |
---|
Resolve |
type Resolve = (
source: string,
importer?: string,
options?: {
skipSelf?: boolean;
isEntry?: boolean;
assertions?: { [key: string]: string };
custom?: { [plugin: string]: any };
}
) => ResolvedId;
TIP
此钩子的返回类型 ResolvedId 在 this.getModuleInfo 中定义。
使用 Rollup 使用的相同插件解析导入到模块 id(即文件名),并确定导入是否应为外部。如果 Rollup 或任何插件无法解析导入,但用户未明确将其标记为外部,则返回 null。如果返回绝对外部 id,则应通过 makeAbsoluteExternalsRelative 选项或在 resolveId 钩子中进行显式插件选择,将其保持为绝对输出,external 将是 "absolute" 而不是 true。
如果传递 skipSelf: true,则在解析时将跳过从中调用 this.resolve 的插件的 resolveId 钩子。当其他插件在处理原始 this.resolve 调用时,使用 完全相同的 source 和 importer 在其 resolveId 钩子中也调用 this.resolve 时,原始插件的 resolveId 钩子也将跳过这些调用。这里的理由是插件已经声明在此时点它“不知道”如何解析这个特定的 source 和 importer 组合。如果你不想要这种行为,请不要使用 skipSelf,但如果必要,可以实现自己的无限循环预防机制。
你还可以通过 custom 选项传递插件特定选项的对象,有关详细信息,请参见 自定义解析器选项。
你在这里传递的 isEntry 值将传递给处理此调用的 resolveId 钩子,否则如果有导入器,则传递 false,如果没有,则传递 true。
如果为 assertions 传递对象,则它将模拟使用断言解析导入,例如 assertions: {type: "json"} 模拟解析 import "foo" assert {type: "json"}。这将传递给处理此调用的任何 resolveId 钩子,并最终成为返回的对象的一部分。
在从 resolveId 钩子调用此函数时,你应始终检查是否有意义将 isEntry、custom 和 assertions 选项传递下去。
resolvedBy 的值指示哪个插件解析了此源。如果它是由 Rollup 本身解析的,则该值将为 "rollup"。如果插件中的 resolveId 钩子解析此源,则该值将是插件的名称,除非它为 resolvedBy 返回了显式值。此标志仅用于调试和文档目的,Rollup 不会进一步处理它。