From 745ae1f9501745a139ea2568a5136a5882e21bfe Mon Sep 17 00:00:00 2001 From: JianChao Date: Fri, 13 May 2022 12:32:55 +0800 Subject: [PATCH 1/3] fix(vite): on win, add file:// protocol to vite-node entry file path --- packages/vite/src/vite-node.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/vite-node.ts b/packages/vite/src/vite-node.ts index 20491a7564b..9ff87b5d4f1 100644 --- a/packages/vite/src/vite-node.ts +++ b/packages/vite/src/vite-node.ts @@ -8,6 +8,8 @@ import { distDir } from './dirs' import type { ViteBuildContext } from './vite' import { isCSS } from './utils' +const isWindows = /^win/i.test(process.platform) + // TODO: Remove this in favor of registerViteNodeMiddleware // after Nitropack or h3 fixed for adding middlewares after setup export function viteNodePlugin (ctx: ViteBuildContext): VitePlugin { @@ -87,6 +89,7 @@ export async function prepareDevServerEntry (ctx: ViteBuildContext) { const host = ctx.nuxt.options.server.host || 'localhost' const port = ctx.nuxt.options.server.port || '3000' const protocol = ctx.nuxt.options.server.https ? 'https' : 'http' + const winFileProtocol = isWindows ? 'file://' : '' // Serialize and pass vite-node runtime options const viteNodeServerOptions = { @@ -99,10 +102,10 @@ export async function prepareDevServerEntry (ctx: ViteBuildContext) { await fse.writeFile( resolve(ctx.nuxt.options.buildDir, 'dist/server/server.mjs'), - `export { default } from ${JSON.stringify(resolve(distDir, 'runtime/vite-node.mjs'))}` + `export { default } from ${JSON.stringify(winFileProtocol + resolve(distDir, 'runtime/vite-node.mjs'))}` ) await fse.writeFile( resolve(ctx.nuxt.options.buildDir, 'dist/server/client.manifest.mjs'), - `export { default } from ${JSON.stringify(resolve(distDir, 'runtime/client.manifest.mjs'))}` + `export { default } from ${JSON.stringify(winFileProtocol + resolve(distDir, 'runtime/client.manifest.mjs'))}` ) } From 7fc0c3e4946ac1497dd5ffd652a475c6917e6d90 Mon Sep 17 00:00:00 2001 From: JianChao Date: Fri, 13 May 2022 13:43:05 +0800 Subject: [PATCH 2/3] fix(vite): add file:// protocol for vite-node entry file path --- packages/vite/src/vite-node.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/vite/src/vite-node.ts b/packages/vite/src/vite-node.ts index 9ff87b5d4f1..e0d7b7a874b 100644 --- a/packages/vite/src/vite-node.ts +++ b/packages/vite/src/vite-node.ts @@ -8,8 +8,6 @@ import { distDir } from './dirs' import type { ViteBuildContext } from './vite' import { isCSS } from './utils' -const isWindows = /^win/i.test(process.platform) - // TODO: Remove this in favor of registerViteNodeMiddleware // after Nitropack or h3 fixed for adding middlewares after setup export function viteNodePlugin (ctx: ViteBuildContext): VitePlugin { @@ -89,7 +87,6 @@ export async function prepareDevServerEntry (ctx: ViteBuildContext) { const host = ctx.nuxt.options.server.host || 'localhost' const port = ctx.nuxt.options.server.port || '3000' const protocol = ctx.nuxt.options.server.https ? 'https' : 'http' - const winFileProtocol = isWindows ? 'file://' : '' // Serialize and pass vite-node runtime options const viteNodeServerOptions = { @@ -102,10 +99,10 @@ export async function prepareDevServerEntry (ctx: ViteBuildContext) { await fse.writeFile( resolve(ctx.nuxt.options.buildDir, 'dist/server/server.mjs'), - `export { default } from ${JSON.stringify(winFileProtocol + resolve(distDir, 'runtime/vite-node.mjs'))}` + `export { default } from ${JSON.stringify('file://' + resolve(distDir, 'runtime/vite-node.mjs'))}` ) await fse.writeFile( resolve(ctx.nuxt.options.buildDir, 'dist/server/client.manifest.mjs'), - `export { default } from ${JSON.stringify(winFileProtocol + resolve(distDir, 'runtime/client.manifest.mjs'))}` + `export { default } from ${JSON.stringify('file://' + resolve(distDir, 'runtime/client.manifest.mjs'))}` ) } From bb20ba79e69a0040db99431056b9ed521fbe5e8e Mon Sep 17 00:00:00 2001 From: JianChao Date: Fri, 13 May 2022 17:43:55 +0800 Subject: [PATCH 3/3] refactor(vite): discard string concat, use pathToFileURL --- packages/vite/src/vite-node.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/vite-node.ts b/packages/vite/src/vite-node.ts index e0d7b7a874b..d4d5985e386 100644 --- a/packages/vite/src/vite-node.ts +++ b/packages/vite/src/vite-node.ts @@ -1,3 +1,4 @@ +import { pathToFileURL } from 'node:url' import { createApp, createError, defineEventHandler, defineLazyEventHandler } from 'h3' import { ViteNodeServer } from 'vite-node/server' import fse from 'fs-extra' @@ -97,12 +98,15 @@ export async function prepareDevServerEntry (ctx: ViteBuildContext) { } process.env.NUXT_VITE_NODE_OPTIONS = JSON.stringify(viteNodeServerOptions) + const serverResolvedPath = resolve(distDir, 'runtime/vite-node.mjs') + const manifestResolvedPath = resolve(distDir, 'runtime/client.manifest.mjs') + await fse.writeFile( resolve(ctx.nuxt.options.buildDir, 'dist/server/server.mjs'), - `export { default } from ${JSON.stringify('file://' + resolve(distDir, 'runtime/vite-node.mjs'))}` + `export { default } from ${JSON.stringify(pathToFileURL(serverResolvedPath).href)}` ) await fse.writeFile( resolve(ctx.nuxt.options.buildDir, 'dist/server/client.manifest.mjs'), - `export { default } from ${JSON.stringify('file://' + resolve(distDir, 'runtime/client.manifest.mjs'))}` + `export { default } from ${JSON.stringify(pathToFileURL(manifestResolvedPath).href)}` ) }