Skip to content
This repository has been archived by the owner on Apr 6, 2023. It is now read-only.

fix(nuxt): pass and format vite-node build errors #6683

Merged
merged 13 commits into from
Sep 3, 2022
14 changes: 14 additions & 0 deletions packages/vite/src/runtime/vite-node.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { performance } from 'node:perf_hooks'
import { createError } from 'h3'
import { ViteNodeRunner } from 'vite-node/client'
import { $fetch } from 'ohmyfetch'
import consola from 'consola'
Expand All @@ -12,6 +13,19 @@ const runner = new ViteNodeRunner({
async fetchModule (id) {
return await $fetch('/module/' + encodeURI(id), {
baseURL: viteNodeOptions.baseURL
}).catch((err) => {
if (!err.data) {
throw err
}
// Legacy bundler behavior
// return { code: '' }
// Keys: id, plugin, message, name, stack, loc, pluginCode, frame
const viteErrorObject = err.data.data || err.data
const _error = createError({
statusMessage: `[vite-node-runner] Cannot fetch module ${id}`,
...viteErrorObject
})
throw _error
})
}
})
Expand Down
14 changes: 10 additions & 4 deletions packages/vite/src/vite-node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { createApp, createError, defineEventHandler, defineLazyEventHandler } fr
import { ViteNodeServer } from 'vite-node/server'
import fse from 'fs-extra'
import { resolve } from 'pathe'
import { addServerMiddleware } from '@nuxt/kit'
import { addDevServerHandler } from '@nuxt/kit'
import type { ModuleNode, Plugin as VitePlugin } from 'vite'
import { normalizeViteManifest } from 'vue-bundle-renderer'
import { resolve as resolveModule } from 'mlly'
Expand Down Expand Up @@ -41,7 +41,7 @@ export function viteNodePlugin (ctx: ViteBuildContext): VitePlugin {
}

export function registerViteNodeMiddleware (ctx: ViteBuildContext) {
addServerMiddleware({
addDevServerHandler({
route: '/__nuxt_vite_node__/',
handler: createViteNodeMiddleware(ctx)
})
Expand Down Expand Up @@ -120,12 +120,18 @@ function createViteNodeMiddleware (ctx: ViteBuildContext, invalidates: Set<strin
if (moduleId === '/') {
throw createError({ statusCode: 400 })
}
const module = await node.fetchModule(moduleId) as any
const module = await node.fetchModule(moduleId).catch((err) => {
throw createError({
statusCode: 500,
statusMessage: `[vite-node] Cannot fetch module ${moduleId}`,
data: err
pi0 marked this conversation as resolved.
Show resolved Hide resolved
})
})
return module
}
}))

return app.nodeHandler
return app
}

export async function initViteNodeServer (ctx: ViteBuildContext) {
Expand Down
2 changes: 1 addition & 1 deletion playground/app.vue
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@
</div>
</template>

<style scoped>
<style scoped
</style>
3 changes: 1 addition & 2 deletions playground/nuxt.config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { defineNuxtConfig } from 'nuxt'

export default defineNuxtConfig({
})
export default defineNuxtConfig({})