From c0f47e03b06e1d847bc48cc8dabfafe4c0ba36c4 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 27 Feb 2025 21:43:02 +0900 Subject: [PATCH] fix(vite-node): fix `buildStart` on Vite 6 (#7480) --- packages/vite-node/README.md | 8 +++++--- packages/vite-node/src/cli.ts | 6 ++++-- test/vite-node/src/buildStart/test.ts | 1 + test/vite-node/src/buildStart/vite.config.ts | 21 ++++++++++++++++++++ test/vite-node/test/cli.test.ts | 6 ++++++ 5 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 test/vite-node/src/buildStart/test.ts create mode 100644 test/vite-node/src/buildStart/vite.config.ts diff --git a/packages/vite-node/README.md b/packages/vite-node/README.md index 5268eda5d..9badc718c 100644 --- a/packages/vite-node/README.md +++ b/packages/vite-node/README.md @@ -82,7 +82,7 @@ Note that when using the `--script` option, Vite Node forwards every argument an In Vite Node, the server and runner (client) are separated, so you can integrate them in different contexts (workers, cross-process, or remote) if needed. The demo below shows a simple example of having both (server and runner) running in the same context ```ts -import { createServer } from 'vite' +import { createServer, version as viteVersion } from 'vite' import { ViteNodeRunner } from 'vite-node/client' import { ViteNodeServer } from 'vite-node/server' import { installSourcemapsSupport } from 'vite-node/source-map' @@ -94,8 +94,10 @@ const server = await createServer({ disabled: true, }, }) -// this is need to initialize the plugins -await server.pluginContainer.buildStart({}) +// For old Vite, this is need to initialize the plugins. +if (Number(viteVersion.split('.')[0]) < 6) { + await server.pluginContainer.buildStart({}) +} // create vite-node server const node = new ViteNodeServer(server) diff --git a/packages/vite-node/src/cli.ts b/packages/vite-node/src/cli.ts index 4fb4b4ac3..0b49d5cc3 100644 --- a/packages/vite-node/src/cli.ts +++ b/packages/vite-node/src/cli.ts @@ -2,7 +2,7 @@ import type { ViteNodeServerOptions } from './types' import { resolve } from 'node:path' import cac from 'cac' import c from 'tinyrainbow' -import { createServer, loadEnv } from 'vite' +import { createServer, loadEnv, version as viteVersion } from 'vite' import { version } from '../package.json' import { ViteNodeRunner } from './client' import { createHotContext, handleMessage, viteNodeHmrPlugin } from './hmr' @@ -94,7 +94,9 @@ async function run(files: string[], options: CliOptions = {}) { }, plugins: [options.watch && viteNodeHmrPlugin()], }) - await server.pluginContainer.buildStart({}) + if (Number(viteVersion.split('.')[0]) < 6) { + await server.pluginContainer.buildStart({}) + } const env = loadEnv(server.config.mode, server.config.envDir, '') diff --git a/test/vite-node/src/buildStart/test.ts b/test/vite-node/src/buildStart/test.ts new file mode 100644 index 000000000..08d065f20 --- /dev/null +++ b/test/vite-node/src/buildStart/test.ts @@ -0,0 +1 @@ +export default 'test' diff --git a/test/vite-node/src/buildStart/vite.config.ts b/test/vite-node/src/buildStart/vite.config.ts new file mode 100644 index 000000000..ba61bca72 --- /dev/null +++ b/test/vite-node/src/buildStart/vite.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from 'vite' + +const data: string[] = [] + +export default defineConfig({ + plugins: [ + { + name: 'test-plugin', + async buildStart() { + data.push('buildStart:in') + await new Promise(r => setTimeout(r, 100)) + data.push('buildStart:out') + }, + transform(_code, id) { + if (id.endsWith('/test.ts')) { + console.log(JSON.stringify(data)) + } + }, + }, + ], +}) diff --git a/test/vite-node/test/cli.test.ts b/test/vite-node/test/cli.test.ts index 5e81e4c88..382b8cd95 100644 --- a/test/vite-node/test/cli.test.ts +++ b/test/vite-node/test/cli.test.ts @@ -58,3 +58,9 @@ it('error stack', async () => { const { viteNode } = await runViteNodeCli('--watch', entryPath) await viteNode.waitForStdout('source-map.ts:7:11') }) + +it('buildStart', async () => { + const root = resolve(__dirname, '../src/buildStart') + const result = await runViteNodeCli('--root', root, resolve(root, 'test.ts')) + await result.viteNode.waitForStdout('["buildStart:in","buildStart:out"]') +}) -- 2.51.2