Skip to content

Commit

Permalink
fix(css): only use files the current bundle contains
Browse files Browse the repository at this point in the history
If using multiple output formats like `es` and `cjs` and running vite
in watch mode, then `generateBundle` will be called once per output format.
The bundle on each call only contains the files for the current output format,
but our `pureCSSChunks` contain all files (from all output formats).
So we need to filter the chunk list to only contain valid files,
as otherwise `basename` will fail with:

> The "path" argument must be of type string. Received undefined

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
  • Loading branch information
susnux committed May 15, 2024
1 parent 2b61cc3 commit 1891dd7
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions packages/vite/src/node/plugins/css.ts
Original file line number Diff line number Diff line change
Expand Up @@ -848,9 +848,13 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
.map((chunk) => [chunk.preliminaryFileName, chunk.fileName]),
)

const pureCssChunkNames = [...pureCssChunks].map(
(pureCssChunk) => prelimaryNameToChunkMap[pureCssChunk.fileName],
)
// When running in watch mode the generateBundle is called once per output format
// in this case the `bundle` is not populated with the other output files
// but they are still in `pureCssChunks`.
// So we need to filter the names and only use those who are defined
const pureCssChunkNames = [...pureCssChunks]
.map((pureCssChunk) => prelimaryNameToChunkMap[pureCssChunk.fileName])
.filter(Boolean)

const replaceEmptyChunk = getEmptyChunkReplacer(
pureCssChunkNames,
Expand Down

0 comments on commit 1891dd7

Please sign in to comment.