From c0bc411700a6234d0d1c5ac4a3798ab18a6587c6 Mon Sep 17 00:00:00 2001 From: Tim MacDonald Date: Wed, 31 Aug 2022 16:52:21 +1000 Subject: [PATCH] fix: include duplicate assets in the bundle --- packages/vite/src/node/plugins/asset.ts | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/plugins/asset.ts b/packages/vite/src/node/plugins/asset.ts index 94c34a40f8d22e..35d1397c1550b0 100644 --- a/packages/vite/src/node/plugins/asset.ts +++ b/packages/vite/src/node/plugins/asset.ts @@ -8,7 +8,8 @@ import type { OutputOptions, PluginContext, PreRenderedAsset, - RenderedChunk + RenderedChunk, + OutputAsset } from 'rollup' import MagicString from 'magic-string' import colors from 'picocolors' @@ -25,6 +26,8 @@ const urlRE = /(\?|&)url(?:&|$)/ const assetCache = new WeakMap>() +const duplicateAssets: OutputAsset[] = [] + const assetHashToFilenameMap = new WeakMap< ResolvedConfig, Map @@ -182,6 +185,12 @@ export function assetPlugin(config: ResolvedConfig): Plugin { }, generateBundle(_, bundle) { + duplicateAssets.forEach((asset) => { + if (asset.name) { + bundle[asset.name] = asset + } + }) + // do not emit assets for SSR build if (config.command === 'build' && config.build.ssr) { for (const file in bundle) { @@ -470,8 +479,8 @@ async function fileToBuiltUrl( map.set(contentHash, fileName) } const emittedSet = emittedHashMap.get(config)! + const name = normalizePath(path.relative(config.root, file)) if (!emittedSet.has(contentHash)) { - const name = normalizePath(path.relative(config.root, file)) pluginContext.emitFile({ name, fileName, @@ -479,6 +488,14 @@ async function fileToBuiltUrl( source: content }) emittedSet.add(contentHash) + } else { + duplicateAssets.push({ + name, + fileName, + type: 'asset', + source: content, + isAsset: true + }) } url = `__VITE_ASSET__${contentHash}__${postfix ? `$_${postfix}__` : ``}` // TODO_BASE