fix(hoisted scripts): consider script's dependents (#7144)
This commit is contained in:
parent
49bfeacdec
commit
ba06362409
2 changed files with 45 additions and 31 deletions
5
.changeset/perfect-oranges-tease.md
Normal file
5
.changeset/perfect-oranges-tease.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
'astro': patch
|
||||
---
|
||||
|
||||
Fixed an issue where scripts that weren't safe to inline were inlined.
|
|
@ -4,7 +4,7 @@ import { viteID } from '../../util.js';
|
|||
import type { BuildInternals } from '../internal.js';
|
||||
import { getPageDataByViteID } from '../internal.js';
|
||||
import type { AstroBuildPlugin } from '../plugin';
|
||||
import type { StaticBuildOptions } from '../types';
|
||||
import type { OutputChunk, StaticBuildOptions } from '../types';
|
||||
|
||||
function virtualHoistedEntry(id: string) {
|
||||
return id.startsWith('/astro/hoisted.js?q=');
|
||||
|
@ -50,15 +50,25 @@ export function vitePluginHoistedScripts(
|
|||
assetInlineLimit = settings.config.vite?.build.assetsInlineLimit;
|
||||
}
|
||||
|
||||
const considerInlining = new Map<string, OutputChunk>();
|
||||
const importedByOtherScripts = new Set<string>();
|
||||
|
||||
// Find all page entry points and create a map of the entry point to the hashed hoisted script.
|
||||
// This is used when we render so that we can add the script to the head.
|
||||
for (const [id, output] of Object.entries(bundle)) {
|
||||
Object.entries(bundle).forEach(([ id, output ]) => {
|
||||
if (
|
||||
output.type === 'chunk' &&
|
||||
output.facadeModuleId &&
|
||||
virtualHoistedEntry(output.facadeModuleId)
|
||||
) {
|
||||
considerInlining.set(id, output);
|
||||
output.imports.forEach(imported => importedByOtherScripts.add(imported));
|
||||
}
|
||||
});
|
||||
|
||||
for (const [ id, output ] of considerInlining.entries()) {
|
||||
const canBeInlined =
|
||||
importedByOtherScripts.has(output.fileName) === false &&
|
||||
output.imports.length === 0 &&
|
||||
output.dynamicImports.length === 0 &&
|
||||
Buffer.byteLength(output.code) <= assetInlineLimit;
|
||||
|
@ -88,8 +98,7 @@ export function vitePluginHoistedScripts(
|
|||
if (removeFromBundle) {
|
||||
delete bundle[id];
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
},
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue