Skip to content

Commit 787353c

Browse files
committed
fix(manifest): preserve pure css chunk assets
1 parent 1a2e5e6 commit 787353c

3 files changed

Lines changed: 28 additions & 6 deletions

File tree

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ const assetCache = new WeakMap<ResolvedConfig, Map<string, string>>()
4242
export interface GeneratedAssetMeta {
4343
originalName: string
4444
isEntry?: boolean
45+
// for pure css chunk's assets, e.g: fonts
46+
importedAssets?: Set<string>
4547
}
4648
export const generatedAssets = new WeakMap<
4749
ResolvedConfig,

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,13 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
653653
const originalName = isPreProcessor(lang) ? cssAssetName : cssFileName
654654
generatedAssets
655655
.get(config)!
656-
.set(referenceId, { originalName, isEntry })
656+
.set(referenceId, {
657+
originalName,
658+
isEntry,
659+
importedAssets: isPureCssChunk
660+
? chunk.viteMetadata?.importedAssets
661+
: undefined,
662+
})
657663
chunk.viteMetadata!.importedCss.add(this.getFileName(referenceId))
658664

659665
if (emitTasksLength === emitTasks.length) {

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

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,10 @@ export function manifestPlugin(config: ResolvedConfig): Plugin {
6363
return filteredImports
6464
}
6565

66-
function createChunk(chunk: OutputChunk): ManifestChunk {
66+
function createChunk(
67+
chunk: OutputChunk,
68+
fileNameToAssetMeta: Map<string, GeneratedAssetMeta>,
69+
): ManifestChunk {
6770
const manifestChunk: ManifestChunk = {
6871
file: chunk.fileName,
6972
}
@@ -92,13 +95,21 @@ export function manifestPlugin(config: ResolvedConfig): Plugin {
9295
}
9396
}
9497

95-
if (chunk.viteMetadata?.importedCss.size) {
96-
manifestChunk.css = [...chunk.viteMetadata.importedCss]
97-
}
9898
if (chunk.viteMetadata?.importedAssets.size) {
9999
manifestChunk.assets = [...chunk.viteMetadata.importedAssets]
100100
}
101101

102+
if (chunk.viteMetadata?.importedCss.size) {
103+
manifestChunk.css = [...chunk.viteMetadata.importedCss]
104+
manifestChunk.css.forEach((cssFile) => {
105+
const asset = fileNameToAssetMeta.get(cssFile)
106+
if (asset?.importedAssets) {
107+
manifestChunk.assets ||= []
108+
manifestChunk.assets.push(...asset.importedAssets)
109+
}
110+
})
111+
}
112+
102113
return manifestChunk
103114
}
104115

@@ -127,7 +138,10 @@ export function manifestPlugin(config: ResolvedConfig): Plugin {
127138
for (const file in bundle) {
128139
const chunk = bundle[file]
129140
if (chunk.type === 'chunk') {
130-
manifest[getChunkName(chunk)] = createChunk(chunk)
141+
manifest[getChunkName(chunk)] = createChunk(
142+
chunk,
143+
fileNameToAssetMeta,
144+
)
131145
} else if (chunk.type === 'asset' && typeof chunk.name === 'string') {
132146
// Add every unique asset to the manifest, keyed by its original name
133147
const assetMeta = fileNameToAssetMeta.get(chunk.fileName)

0 commit comments

Comments
 (0)