# 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 将用实际的块哈希值替换它。

Last Updated: 6/14/2023, 8:56:23 AM