Skip to content

Commit e0a0cf3

Browse files
committed
fix(css): remove empty css chunks with cssCodeSplit: false
Resolves #16582 When setting `cssCodeSplit: false` the styles are still split into one style file. But currently the imported CSS results in empty chunks, as in the current implementation empty chunks are only removed when `cssCodeSplit` was set to `true`. So this also adds empty style chunks to `pureCSSChunks` even with `cssCodeSplit: false`. Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
1 parent 2bc5d3d commit e0a0cf3

File tree

1 file changed

+15
-13
lines changed
  • packages/vite/src/node/plugins

1 file changed

+15
-13
lines changed

packages/vite/src/node/plugins/css.ts

+15-13
Original file line numberDiff line numberDiff line change
@@ -723,13 +723,13 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
723723
}
724724

725725
if (chunkCSS) {
726+
// for module output we need to remove pure css chunks
727+
if (isPureCssChunk && (opts.format === 'es' || opts.format === 'cjs')) {
728+
// this is a shared CSS-only chunk that is empty.
729+
pureCssChunks.add(chunk)
730+
}
726731
if (config.build.cssCodeSplit) {
727732
if (opts.format === 'es' || opts.format === 'cjs') {
728-
if (isPureCssChunk) {
729-
// this is a shared CSS-only chunk that is empty.
730-
pureCssChunks.add(chunk)
731-
}
732-
733733
const isEntry = chunk.isEntry && isPureCssChunk
734734
const cssFullAssetName = ensureFileExt(chunk.name, '.css')
735735
// if facadeModuleId doesn't exist or doesn't have a CSS extension,
@@ -838,6 +838,7 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
838838
}
839839

840840
// remove empty css chunks and their imports
841+
let pureCssChunkNames: string[] = []
841842
if (pureCssChunks.size) {
842843
// map each pure css chunk (rendered chunk) to it's corresponding bundle
843844
// chunk. we check that by `preliminaryFileName` as they have different
@@ -848,7 +849,7 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
848849
.map((chunk) => [chunk.preliminaryFileName, chunk.fileName]),
849850
)
850851

851-
const pureCssChunkNames = [...pureCssChunks].map(
852+
pureCssChunkNames = [...pureCssChunks].map(
852853
(pureCssChunk) => prelimaryNameToChunkMap[pureCssChunk.fileName],
853854
)
854855

@@ -885,13 +886,6 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
885886
}
886887
}
887888
}
888-
889-
const removedPureCssFiles = removedPureCssFilesCache.get(config)!
890-
pureCssChunkNames.forEach((fileName) => {
891-
removedPureCssFiles.set(fileName, bundle[fileName] as RenderedChunk)
892-
delete bundle[fileName]
893-
delete bundle[`${fileName}.map`]
894-
})
895889
}
896890

897891
function extractCss() {
@@ -927,6 +921,14 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
927921
source: extractedCss,
928922
})
929923
}
924+
925+
// remove pure CSS chunks only after the css has been extracted
926+
const removedPureCssFiles = removedPureCssFilesCache.get(config)!
927+
pureCssChunkNames.forEach((fileName) => {
928+
removedPureCssFiles.set(fileName, bundle[fileName] as RenderedChunk)
929+
delete bundle[fileName]
930+
delete bundle[`${fileName}.map`]
931+
})
930932
},
931933
}
932934
}

0 commit comments

Comments
 (0)