diff --git a/packages/vite/src/node/plugins/asset.ts b/packages/vite/src/node/plugins/asset.ts index 74f0220a4e9c19..447496ba3ad224 100644 --- a/packages/vite/src/node/plugins/asset.ts +++ b/packages/vite/src/node/plugins/asset.ts @@ -230,6 +230,7 @@ export function assetPlugin(config: ResolvedConfig): Plugin { generateBundle(_, bundle) { // Remove empty entry point file let importedFiles: Set | undefined + const importedCssAssets = new Set() for (const file in bundle) { const chunk = bundle[file] if ( @@ -257,6 +258,24 @@ export function assetPlugin(config: ResolvedConfig): Plugin { delete bundle[file] } } + if (chunk.type === 'chunk' && chunk.viteMetadata) { + for (const importedAsset of chunk.viteMetadata.importedAssets) { + importedCssAssets.add(importedAsset) + } + for (const importedCss of chunk.viteMetadata.importedCss) { + importedCssAssets.add(importedCss) + } + } + } + + // Remove CSS and assets that were not imported by any chunk + for (const file in bundle) { + const chunk = bundle[file] + if (chunk.type === 'asset' && importedCssAssets.size > 0) { + if (!importedCssAssets.has(cleanUrl(chunk.fileName))) { + delete bundle[file] + } + } } // do not emit assets for SSR build