# resolveFileUrl

类型: ResolveFileUrlHook
类别: sync, first
上一个钩子: 当前块中的每个动态导入表达式,跟随 renderDynamicImport
下一个钩子: 当前块的 banner,footer,intro,outro 并行处理
type ResolveFileUrlHook = (options: {
	chunkId: string;
	fileName: string;
	format: InternalModuleFormat;
	moduleId: string;
	referenceId: string;
	relativePath: string;
}) => string | NullValue;

允许自定义 Rollup 如何解析由插件通过 this.emitFile 发出的文件的 URL。默认情况下,Rollup 将生成代码 import.meta.ROLLUP_FILE_URL_referenceId,该代码应正确生成发出文件的绝对 URL,独立于输出格式和代码部署的主机系统。

为此,除了 CommonJS 和 UMD 之外的所有格式都假定它们在浏览器环境中运行,其中 URL 和 document 可用。如果失败或要生成更优化的代码,则可以使用此钩子自定义此行为。为此,可以使用以下信息:

  • chunkId:引用此文件的块的 ID。如果块文件名包含哈希,则此 ID 将包含占位符。如果最终出现在生成的代码中,Rollup 将使用实际文件名替换此占位符。
  • fileName:发出文件的路径和文件名,相对于 output.dir,没有前导的 ./。同样,如果这是一个将在其名称中具有哈希的块,则它将包含占位符。
  • format:呈现的输出格式。
  • moduleId:引用此文件的原始模块的 ID。有助于有条件地以不同方式解析某些静态资源。
  • referenceId:文件的引用 ID。
  • relativePath:发出文件的路径和文件名,相对于引用该文件的块。此路径将不包含前导的 ./,但可能包含前导的 ../。

以下插件将始终相对于当前文档解析所有文件:

function resolveToDocumentPlugin() {
	return {
		name: 'resolve-to-document',
		resolveFileUrl({ fileName }) {
			return `new URL('${fileName}', document.baseURI).href`;
		}
	};
}
Last Updated: 6/14/2023, 8:56:23 AM