diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts index 0e97c247cf01f8..45e35714ae9156 100644 --- a/packages/vite/src/node/plugins/css.ts +++ b/packages/vite/src/node/plugins/css.ts @@ -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,