Skip to content

Commit 29911a4

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

File tree

5 files changed

+48
-37
lines changed

5 files changed

+48
-37
lines changed

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

+14-3
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,17 @@ const inlineRE = /[?&]inline\b/
4242

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

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

4857
// add own dictionary entry by directly assigning mrmime
4958
export function registerCustomMime(): void {
@@ -143,7 +152,7 @@ export function assetPlugin(config: ResolvedConfig): Plugin {
143152

144153
buildStart() {
145154
assetCache.set(this.environment, new Map())
146-
cssEntriesMap.set(this.environment, new Set())
155+
generatedAssetsMap.set(this.environment, new Map())
147156
},
148157

149158
resolveId(id) {
@@ -395,6 +404,8 @@ async function fileToBuiltUrl(
395404
originalFileName,
396405
source: content,
397406
})
407+
generatedAssetsMap.get(environment)!.set(referenceId, { originalFileName })
408+
398409
url = `__VITE_ASSET__${referenceId}__${postfix ? `$_${postfix}__` : ``}`
399410
}
400411

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

+5-6
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ import { findNearestPackageData } from '../packages'
8989
import { addToHTMLProxyTransformResult } from './html'
9090
import {
9191
assetUrlRE,
92-
cssEntriesMap,
9392
fileToDevUrl,
9493
fileToUrl,
94+
generatedAssetsMap,
9595
publicAssetUrlCache,
9696
publicAssetUrlRE,
9797
publicFileToBuiltUrl,
@@ -470,9 +470,7 @@ export function cssPostPlugin(config: ResolvedConfig): RolldownPlugin {
470470
assetFileNames({
471471
type: 'asset',
472472
name: cssAssetName,
473-
names: [cssAssetName],
474473
originalFileName: null,
475-
originalFileNames: [],
476474
source: '/* vite internal call, ignore */',
477475
}),
478476
)
@@ -628,6 +626,8 @@ export function cssPostPlugin(config: ResolvedConfig): RolldownPlugin {
628626
},
629627

630628
async renderChunk(code, chunk, opts) {
629+
const generatedAssets = generatedAssetsMap.get(this.environment)!
630+
631631
let chunkCSS = ''
632632
// the chunk is empty if it's a dynamic entry chunk that only contains a CSS import
633633
const isJsChunkEmpty = code === '' && !chunk.isEntry
@@ -790,6 +790,7 @@ export function cssPostPlugin(config: ResolvedConfig): RolldownPlugin {
790790
originalFileName,
791791
source: content,
792792
})
793+
generatedAssets.set(referenceId, { originalFileName })
793794

794795
const filename = this.getFileName(referenceId)
795796
getChunkMetadata(chunk)!.importedAssets.add(cleanUrl(filename))
@@ -847,9 +848,7 @@ export function cssPostPlugin(config: ResolvedConfig): RolldownPlugin {
847848
originalFileName,
848849
source: chunkCSS,
849850
})
850-
if (isEntry) {
851-
cssEntriesMap.get(this.environment)!.add(referenceId)
852-
}
851+
generatedAssets.set(referenceId, { originalFileName, isEntry })
853852
getChunkMetadata(chunk)!.importedCss.add(
854853
this.getFileName(referenceId),
855854
)

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

+1-2
Original file line numberDiff line numberDiff line change
@@ -918,8 +918,7 @@ export function buildHtmlPlugin(config: ResolvedConfig): RolldownPlugin {
918918
const cssChunk =
919919
cssBundleName &&
920920
(Object.values(bundle).find(
921-
(chunk) =>
922-
chunk.type === 'asset' && chunk.names.includes(cssBundleName),
921+
(chunk) => chunk.type === 'asset' && chunk.name === cssBundleName,
923922
) as OutputAsset | undefined)
924923
if (cssChunk) {
925924
result = injectToHead(result, [

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

+27-19
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 { usePerEnvironmentState } 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

+1-7
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)