fix(vite): add additional before skipping vite transform (#10120)

This commit is contained in:
Anthony Fu 2023-01-16 17:04:16 +01:00 committed by GitHub
parent 5d069a93ce
commit 1e8da22893
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 40 additions and 2 deletions

View File

@ -130,11 +130,17 @@ export async function buildClient (ctx: ViteBuildContext) {
next()
}
})
const viteMiddleware = defineEventHandler(async (event) => {
// Workaround: vite devmiddleware modifies req.url
const originalURL = event.node.req.url!
const viteRoutes = viteServer.middlewares.stack.map(m => m.route).filter(r => r.length > 1)
if (!originalURL.startsWith(clientConfig.base!) && !viteRoutes.some(route => originalURL.startsWith(route))) {
// @ts-expect-error _skip_transform is a private property
event.node.req._skip_transform = !originalURL.startsWith(clientConfig.base!)
event.node.req._skip_transform = true
}
await new Promise((resolve, reject) => {
viteServer.middlewares.handle(event.node.req, event.node.res, (err: Error) => {
event.node.req.url = originalURL

View File

@ -894,6 +894,16 @@ describe('component islands', () => {
})
})
describe.runIf(process.env.NUXT_TEST_DEV && !process.env.TEST_WITH_WEBPACK)('vite plugins', () => {
it('does not override vite plugins', async () => {
expect(await $fetch('/vite-plugin-without-path')).toBe('vite-plugin without path')
expect(await $fetch('/__nuxt-test')).toBe('vite-plugin with __nuxt prefix')
})
it('does not allow direct access to nuxt source folder', async () => {
expect(await $fetch('/app.config')).toContain('404')
})
})
describe.skipIf(process.env.NUXT_TEST_DEV || isWindows)('payload rendering', () => {
it('renders a payload', async () => {
const payload = await $fetch('/random/a/_payload.js', { responseType: 'text' })

View File

@ -100,6 +100,28 @@ export default defineNuxtConfig({
export: 'namedExport',
filePath: '~/other-components-folder/named-export'
})
},
'vite:extendConfig' (config) {
config.plugins!.push({
name: 'nuxt:server',
configureServer (server) {
server.middlewares.use((req, res, next) => {
if (req.url === '/vite-plugin-without-path') {
res.end('vite-plugin without path')
return
}
next()
})
server.middlewares.use((req, res, next) => {
if (req.url === '/__nuxt-test') {
res.end('vite-plugin with __nuxt prefix')
return
}
next()
})
}
})
}
},
experimental: {