vite-node
raw JSON →Vite-node is a tool that uses Vite as a Node.js runtime, enabling on-demand evaluation of JavaScript/TypeScript files with Vite's plugin pipeline, HMR, and alias resolution. Current stable version is v6.0.0, which requires Node ^20.19.0 || >=22.12.0 and upgrades Vite to v8. The project was originally extracted from Nuxt 3's SSR and previously powered Vitest, but Vitest has migrated to Vite's built-in Environment Module Runner. vite-node remains maintained for legacy ecosystem support, but new projects should consider using Vite's native solution. It features top-level await, shims for __dirname/__filename in ESM, and native Node module access. The library is published as a standalone package on npm and follows a semver release cadence with breaking changes in major versions.
Common errors
error Error: Cannot find module 'vite-node/client' ↓
error TypeError: viteNode.default is not a function ↓
error SyntaxError: The requested module 'vite-node/client' does not provide an export named 'ViteNodeRunner' ↓
error [vite-node] [Error] Failed to resolve module: some-module ↓
Warnings
breaking v6.0.0 upgrades Vite from v5 to v8. The Vite plugin API and internal structures may have changed. ↓
breaking v5.0.0 migrated the codebase from the Vitest monorepo to a standalone repo. The package switched to ESM-only. ↓
deprecated vite-node is effectively superseded by Vite's built-in Environment Module Runner. The maintainers recommend new projects use Vite's native solution. ↓
gotcha The 'vite-node' main package entry exports no default; ViteNodeServer and ViteNodeRunner are in subpaths. ↓
gotcha Older Vite versions (<6) require manually calling server.pluginContainer.buildStart({}) after createServer. ↓
Install
npm install vite-node yarn add vite-node pnpm add vite-node Imports
- ViteNodeRunner wrong
import { ViteNodeRunner } from 'vite-node'correctimport { ViteNodeRunner } from 'vite-node/client' - ViteNodeServer wrong
const { ViteNodeServer } = require('vite-node/server')correctimport { ViteNodeServer } from 'vite-node/server' - installSourcemapsSupport
import { installSourcemapsSupport } from 'vite-node/source-map' - default import wrong
const viteNode = require('vite-node')correctimport viteNode from 'vite-node'
Quickstart
import { createServer } from 'vite'
import { ViteNodeRunner } from 'vite-node/client'
import { ViteNodeServer } from 'vite-node/server'
import { installSourcemapsSupport } from 'vite-node/source-map'
const server = await createServer({
optimizeDeps: {
noDiscovery: true,
include: undefined,
},
})
if (Number(vite.version.split('.')[0]) < 6) {
await server.pluginContainer.buildStart({})
}
const node = new ViteNodeServer(server)
installSourcemapsSupport({
getSourceMap: (source) => node.getSourceMap(source),
})
const runner = new ViteNodeRunner({
root: server.config.root,
base: server.config.base,
fetchModule(id) {
return node.fetchModule(id)
},
resolveId(id, importer) {
return node.resolveId(id, importer)
},
})
await runner.executeFile('./index.ts')