fix(vite): use same asset filenames between server and client (#7436)

This commit is contained in:
Daniel Roe 2022-09-12 11:12:41 +01:00 committed by GitHub
parent 46240a8c14
commit d5078168be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 7 deletions

View File

@ -8,8 +8,6 @@ import { getPort } from 'get-port-please'
import { joinURL, withLeadingSlash, withoutLeadingSlash, withTrailingSlash } from 'ufo' import { joinURL, withLeadingSlash, withoutLeadingSlash, withTrailingSlash } from 'ufo'
import escapeRE from 'escape-string-regexp' import escapeRE from 'escape-string-regexp'
import defu from 'defu' import defu from 'defu'
import { sanitizeFilePath } from 'mlly'
import { filename } from 'pathe/utils'
import type { OutputOptions } from 'rollup' import type { OutputOptions } from 'rollup'
import { cacheDirPlugin } from './plugins/cache-dir' import { cacheDirPlugin } from './plugins/cache-dir'
import { wpfs } from './utils/wpfs' import { wpfs } from './utils/wpfs'
@ -80,10 +78,6 @@ export async function buildClient (ctx: ViteBuildContext) {
// We want to respect users' own rollup output options // We want to respect users' own rollup output options
clientConfig.build!.rollupOptions = defu(clientConfig.build!.rollupOptions!, { clientConfig.build!.rollupOptions = defu(clientConfig.build!.rollupOptions!, {
output: { output: {
// https://github.com/vitejs/vite/tree/main/packages/vite/src/node/build.ts#L464-L478
assetFileNames: ctx.nuxt.options.dev
? undefined
: chunk => withoutLeadingSlash(join(ctx.nuxt.options.app.buildAssetsDir, `${sanitizeFilePath(filename(chunk.name!))}.[hash].[ext]`)),
chunkFileNames: ctx.nuxt.options.dev ? undefined : withoutLeadingSlash(join(ctx.nuxt.options.app.buildAssetsDir, '[name].[hash].js')), chunkFileNames: ctx.nuxt.options.dev ? undefined : withoutLeadingSlash(join(ctx.nuxt.options.app.buildAssetsDir, '[name].[hash].js')),
entryFileNames: ctx.nuxt.options.dev ? 'entry.js' : withoutLeadingSlash(join(ctx.nuxt.options.app.buildAssetsDir, '[name].[hash].js')) entryFileNames: ctx.nuxt.options.dev ? 'entry.js' : withoutLeadingSlash(join(ctx.nuxt.options.app.buildAssetsDir, '[name].[hash].js'))
} as OutputOptions } as OutputOptions

View File

@ -6,6 +6,8 @@ import { logger, isIgnored, resolvePath } from '@nuxt/kit'
import type { Options } from '@vitejs/plugin-vue' import type { Options } from '@vitejs/plugin-vue'
import replace from '@rollup/plugin-replace' import replace from '@rollup/plugin-replace'
import { sanitizeFilePath } from 'mlly' import { sanitizeFilePath } from 'mlly'
import { withoutLeadingSlash } from 'ufo'
import { filename } from 'pathe/utils'
import { buildClient } from './client' import { buildClient } from './client'
import { buildServer } from './server' import { buildServer } from './server'
import virtual from './plugins/virtual' import virtual from './plugins/virtual'
@ -55,7 +57,13 @@ export async function bundle (nuxt: Nuxt) {
css: resolveCSSOptions(nuxt), css: resolveCSSOptions(nuxt),
build: { build: {
rollupOptions: { rollupOptions: {
output: { sanitizeFileName: sanitizeFilePath } output: {
sanitizeFileName: sanitizeFilePath,
// https://github.com/vitejs/vite/tree/main/packages/vite/src/node/build.ts#L464-L478
assetFileNames: nuxt.options.dev
? undefined
: chunk => withoutLeadingSlash(join(nuxt.options.app.buildAssetsDir, `${sanitizeFilePath(filename(chunk.name!))}.[hash].[ext]`))
}
}, },
watch: { watch: {
exclude: nuxt.options.ignore exclude: nuxt.options.ignore