# 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`;
}
};
}