Skip to content

Commit c46ae3a

Browse files
committed
chore: partial revert "refactor: use originalFileNames/names (vitejs#18240)"
This partially reverts commit f2957c8.
1 parent ae1c2c7 commit c46ae3a

File tree

5 files changed

+48
-37
lines changed

5 files changed

+48
-37
lines changed

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

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,17 @@ const svgExtRE = /\.svg(?:$|\?)/
4343

4444
const assetCache = new WeakMap<Environment, Map<string, string>>()
4545

46-
/** a set of referenceId for entry CSS assets for each environment */
47-
export const cssEntriesMap = new WeakMap<Environment, Set<string>>()
46+
// chunk.name is the basename for the asset ignoring the directory structure
47+
// For the manifest, we need to preserve the original file path and isEntry
48+
// for CSS assets. We keep a map from referenceId to this information.
49+
export interface GeneratedAssetMeta {
50+
originalFileName: string | undefined
51+
isEntry?: boolean
52+
}
53+
export const generatedAssetsMap = new WeakMap<
54+
Environment,
55+
Map<string, GeneratedAssetMeta>
56+
>()
4857

4958
// add own dictionary entry by directly assigning mrmime
5059
export function registerCustomMime(): void {
@@ -144,7 +153,7 @@ export function assetPlugin(config: ResolvedConfig): Plugin {
144153

145154
buildStart() {
146155
assetCache.set(this.environment, new Map())
147-
cssEntriesMap.set(this.environment, new Set())
156+
generatedAssetsMap.set(this.environment, new Map())
148157
},
149158

150159
resolveId(id) {
@@ -409,6 +418,8 @@ async function fileToBuiltUrl(
409418
originalFileName,
410419
source: content,
411420
})
421+
generatedAssetsMap.get(environment)!.set(referenceId, { originalFileName })
422+
412423
url = `__VITE_ASSET__${referenceId}__${postfix ? `$_${postfix}__` : ``}`
413424
}
414425

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,9 @@ import { findNearestPackageData } from '../packages'
9090
import { addToHTMLProxyTransformResult } from './html'
9191
import {
9292
assetUrlRE,
93-
cssEntriesMap,
9493
fileToDevUrl,
9594
fileToUrl,
95+
generatedAssetsMap,
9696
publicAssetUrlCache,
9797
publicAssetUrlRE,
9898
publicFileToBuiltUrl,
@@ -481,9 +481,7 @@ export function cssPostPlugin(config: ResolvedConfig): RolldownPlugin {
481481
assetFileNames({
482482
type: 'asset',
483483
name: cssAssetName,
484-
names: [cssAssetName],
485484
originalFileName: null,
486-
originalFileNames: [],
487485
source: '/* vite internal call, ignore */',
488486
}),
489487
)
@@ -639,6 +637,8 @@ export function cssPostPlugin(config: ResolvedConfig): RolldownPlugin {
639637
},
640638

641639
async renderChunk(code, chunk, opts) {
640+
const generatedAssets = generatedAssetsMap.get(this.environment)!
641+
642642
let chunkCSS = ''
643643
// the chunk is empty if it's a dynamic entry chunk that only contains a CSS import
644644
const isJsChunkEmpty = code === '' && !chunk.isEntry
@@ -801,6 +801,7 @@ export function cssPostPlugin(config: ResolvedConfig): RolldownPlugin {
801801
originalFileName,
802802
source: content,
803803
})
804+
generatedAssets.set(referenceId, { originalFileName })
804805

805806
const filename = this.getFileName(referenceId)
806807
getChunkMetadata(chunk)!.importedAssets.add(cleanUrl(filename))
@@ -858,9 +859,7 @@ export function cssPostPlugin(config: ResolvedConfig): RolldownPlugin {
858859
originalFileName,
859860
source: chunkCSS,
860861
})
861-
if (isEntry) {
862-
cssEntriesMap.get(this.environment)!.add(referenceId)
863-
}
862+
generatedAssets.set(referenceId, { originalFileName, isEntry })
864863
getChunkMetadata(chunk)!.importedCss.add(
865864
this.getFileName(referenceId),
866865
)

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -930,8 +930,7 @@ export function buildHtmlPlugin(config: ResolvedConfig): RolldownPlugin {
930930
const cssChunk =
931931
cssBundleName &&
932932
(Object.values(bundle).find(
933-
(chunk) =>
934-
chunk.type === 'asset' && chunk.names.includes(cssBundleName),
933+
(chunk) => chunk.type === 'asset' && chunk.name === cssBundleName,
935934
) as OutputAsset | undefined)
936935
if (cssChunk) {
937936
result = injectToHead(result, [

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

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import type {
88
import type { Plugin } from '../plugin'
99
import { normalizePath, sortObjectKeys } from '../utils'
1010
import { perEnvironmentState } from '../environment'
11-
import { cssEntriesMap } from './asset'
1211
import { getChunkMetadata } from './metadata'
12+
import { generatedAssetsMap } from './asset'
1313

1414
const endsWithJSRE = /\.[cm]?js$/
1515

@@ -131,15 +131,18 @@ export function manifestPlugin(): Plugin {
131131
return manifestChunk
132132
}
133133

134-
const entryCssReferenceIds = cssEntriesMap.get(this.environment)!
135-
const entryCssAssetFileNames = new Set(entryCssReferenceIds)
136-
for (const id of entryCssReferenceIds) {
137-
try {
138-
const fileName = this.getFileName(id)
139-
entryCssAssetFileNames.add(fileName)
140-
} catch {
141-
// The asset was generated as part of a different output option.
142-
// It was already handled during the previous run of this plugin.
134+
const assets = generatedAssetsMap.get(this.environment)!
135+
const entryCssAssetFileNames = new Set()
136+
for (const [id, asset] of assets.entries()) {
137+
if (asset.isEntry) {
138+
try {
139+
const fileName = this.getFileName(id)
140+
entryCssAssetFileNames.add(fileName)
141+
} catch {
142+
// The asset was generated as part of a different output option.
143+
// It was already handled during the previous run of this plugin.
144+
assets.delete(id)
145+
}
143146
}
144147
}
145148

@@ -149,24 +152,29 @@ export function manifestPlugin(): Plugin {
149152
const chunk = bundle[file]
150153
if (chunk.type === 'chunk') {
151154
manifest[getChunkName(chunk)] = createChunk(chunk)
152-
} else if (chunk.type === 'asset' && chunk.names.length > 0) {
155+
} else if (chunk.type === 'asset' && typeof chunk.name === 'string') {
153156
// Add every unique asset to the manifest, keyed by its original name
154157
const src =
155-
chunk.originalFileNames.length > 0
156-
? chunk.originalFileNames[0]
157-
: '_' + path.basename(chunk.fileName)
158+
chunk.originalFileName ?? '_' + path.basename(chunk.fileName)
158159
const isEntry = entryCssAssetFileNames.has(chunk.fileName)
159160
const asset = createAsset(chunk, src, isEntry)
160161

161162
// If JS chunk and asset chunk are both generated from the same source file,
162163
// prioritize JS chunk as it contains more information
163164
const file = manifest[src]?.file
164-
if (!(file && endsWithJSRE.test(file))) {
165-
manifest[src] = asset
166-
fileNameToAsset.set(chunk.fileName, asset)
167-
}
165+
if (file && endsWithJSRE.test(file)) continue
166+
167+
manifest[src] = asset
168+
fileNameToAsset.set(chunk.fileName, asset)
169+
}
170+
}
168171

169-
for (const originalFileName of chunk.originalFileNames.slice(1)) {
172+
// Add deduplicated assets to the manifest
173+
for (const [referenceId, { originalFileName }] of assets.entries()) {
174+
if (originalFileName && !manifest[originalFileName]) {
175+
const fileName = this.getFileName(referenceId)
176+
const asset = fileNameToAsset.get(fileName)
177+
if (asset) {
170178
manifest[originalFileName] = asset
171179
}
172180
}

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@ import { fileToUrl } from './asset'
2323

2424
type WorkerBundleAsset = {
2525
fileName: string
26-
/** @deprecated */
2726
originalFileName: string | null
28-
originalFileNames: string[]
2927
source: string | Uint8Array
3028
}
3129

@@ -129,7 +127,6 @@ async function bundleWorkerEntry(
129127
saveEmitWorkerAsset(config, {
130128
fileName: outputChunk.fileName,
131129
originalFileName: null,
132-
originalFileNames: [],
133130
source: outputChunk.code,
134131
})
135132
}
@@ -168,7 +165,6 @@ function emitSourcemapForWorkerEntry(
168165
saveEmitWorkerAsset(config, {
169166
fileName: mapFileName,
170167
originalFileName: null,
171-
originalFileNames: [],
172168
source: data,
173169
})
174170
}
@@ -203,7 +199,6 @@ export async function workerFileToUrl(
203199
saveEmitWorkerAsset(config, {
204200
fileName,
205201
originalFileName: null,
206-
originalFileNames: [],
207202
source: outputChunk.code,
208203
})
209204
workerMap.bundle.set(id, fileName)
@@ -499,9 +494,8 @@ export function webWorkerPlugin(config: ResolvedConfig): RolldownPlugin {
499494
this.emitFile({
500495
type: 'asset',
501496
fileName: asset.fileName,
497+
originalFileName: asset.originalFileName,
502498
source: asset.source,
503-
// NOTE: fileName is already generated when bundling the worker
504-
// so no need to pass originalFileNames/names
505499
})
506500
})
507501
workerMap.assets.clear()

0 commit comments

Comments
 (0)