diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index fbadacaa9..9af262a70 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -403,7 +403,9 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { return } - if (ssr || isWorker) { + // If preload is not enabled, we parse through each imports and remove any imports to pure CSS chunks + // as they are removed from the bundle + if (!insertPreload) { const removedPureCssFiles = removedPureCssFilesCache.get(config) if (removedPureCssFiles && removedPureCssFiles.size > 0) { for (const file in bundle) { diff --git a/playground/lib/__tests__/lib.spec.ts b/playground/lib/__tests__/lib.spec.ts index 021d7d1bc..af144de44 100644 --- a/playground/lib/__tests__/lib.spec.ts +++ b/playground/lib/__tests__/lib.spec.ts @@ -67,6 +67,14 @@ describe.runIf(isBuild)('build', () => { expect(code).toMatch(/await import\("\.\/message-[-\w]{8}.js"\)/) }) + test('Library mode does not have any reference to pure CSS chunks', async () => { + const code = readFile('dist/lib/dynamic-import-message.es.mjs') + + // Does not import pure CSS chunks and replaced by `Promise.resolve({})` instead + expect(code).not.toMatch(/await import\("\.\/dynamic-[-\w]{8}.js"\)/) + expect(code).toMatch(/await Promise.resolve\(\{.*\}\)/) + }) + test('@import hoist', async () => { serverLogs.forEach((log) => { // no warning from esbuild css minifier