# resolveImportMeta
类型: | (property: string | null, {chunkId: string, moduleId: string, format: string}) => string | null |
---|---|
类别: | sync, first |
上一个钩子: | 当前块中每个动态导入表达式的 renderDynamicImport |
下一个钩子: | 当前块的 banner, footer, intro, outro 并行处理 |
允许自定义 Rollup 如何处理 import.meta 和 import.meta.someProperty,特别是 import.meta.url。在 ES 模块中,import.meta 是一个对象,import.meta.url 包含当前模块的 URL,例如在浏览器中为http://server.net/bundle.js,在 Node 中为file:///path/to/bundle.js。
默认情况下,对于除 ES 模块以外的格式,Rollup 将 import.meta.url 替换为尝试匹配此行为的代码,返回当前块的动态 URL。请注意,除 CommonJS 和 UMD 之外的所有格式都假定它们在浏览器环境中运行,其中URL和document可用。对于其他属性,import.meta.someProperty
这种行为可以通过这个钩子进行更改,包括 ES 模块。对于每个 import.meta<.someProperty> 的出现,都会调用这个钩子,并传入属性的名称或者如果直接访问 import.meta 则为 null。例如,以下代码将使用原始模块相对路径到当前工作目录的解析 import.meta.url,并在运行时再次将此路径解析为当前文档的基本 URL:
function importMetaUrlCurrentModulePlugin() {
return {
name: 'import-meta-url-current-module',
resolveImportMeta(property, { moduleId }) {
if (property === 'url') {
return `new URL('${path.relative(
process.cwd(),
moduleId
)}', document.baseURI).href`;
}
return null;
}
};
}
如果chunkId包含哈希值,它将包含一个占位符。如果此占位符出现在生成的代码中,Rollup 将用实际的块哈希值替换它。