Vite bundler for Nuxt applications providing seamless integration between Nuxt's framework and Vite's build system
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Server-side build pipeline for SSR support, optimized for Node.js runtime with external dependency handling and development server integration.
Creates Node.js-optimized builds for server-side rendering with proper external dependency handling.
/**
* Build server-side assets for SSR
* Handles Node.js-specific configuration, external dependencies, and SSR optimization
* @param nuxt - Nuxt instance with server configuration
* @param ctx - Vite build context containing entry and config
*/
function buildServer(nuxt: Nuxt, ctx: ViteBuildContext): Promise<void>;Usage Example:
import { buildServer } from "@nuxt/vite-builder/server";
import type { ViteBuildContext } from "@nuxt/vite-builder";
// Called internally by bundle(), but can be used directly
const ctx: ViteBuildContext = {
nuxt,
config: viteConfig,
entry: './app/entry.server.ts'
};
await buildServer(nuxt, ctx);The buildServer function applies Node.js-specific Vite configuration for SSR.
Key Configuration Areas:
// Server-specific configuration applied
const serverConfig = {
define: {
'process.server': true,
'process.client': false,
'process.browser': false,
'import.meta.server': true,
'import.meta.client': false,
'import.meta.browser': false,
// Browser globals undefined in Node.js
'window': 'undefined',
'document': 'undefined',
'navigator': 'undefined',
'location': 'undefined',
'XMLHttpRequest': 'undefined',
},
ssr: {
external: [
'nitro/runtime',
'#internal/nitro',
'#internal/nitro/utils',
],
noExternal: [
// Transpile these packages for server use
...transpile({ isServer: true, isDev: nuxt.options.dev }),
'/__vue-jsx',
'#app',
/^nuxt(\/|$)/,
/(nuxt|nuxt3|nuxt-nightly)\/(dist|src|app)/,
]
},
build: {
ssr: true,
outDir: resolve(nuxt.options.buildDir, 'dist/server'),
rollupOptions: {
input: { server: serverEntry },
output: {
entryFileNames: '[name].mjs',
format: 'module'
}
}
}
};Server builds use different entry points based on SSR configuration.
/**
* Resolve server entry point based on SSR settings
* @param nuxt - Nuxt instance
* @param ctx - Build context
* @returns Resolved server entry path
*/
function resolveServerEntry(nuxt: Nuxt, ctx: ViteBuildContext): Promise<string>;Entry Point Logic:
// Entry point selection
const serverEntry = nuxt.options.ssr
? ctx.entry // Full SSR entry
: await resolvePath(resolve(nuxt.options.appDir, 'entry-spa')); // SPA mode entryServer builds carefully manage external vs bundled dependencies.
External Dependencies:
nitro/runtime - Nitro server runtime#internal/nitro - Internal Nitro utilities#internal/nuxt/paths - Path resolution utilities#app-manifest - Application manifestBundled Dependencies:
/**
* Transpile configuration for server builds
* @param options - Transpilation options
* @returns Array of packages to transpile
*/
function transpile(options: {
isServer: boolean;
isDev: boolean;
}): string[];In development mode, buildServer creates a Vite SSR development server.
/**
* SSR development server for server-side rendering
* Provides module transformation and hot updates for SSR code
*/
interface ViteSSRServer extends ViteDevServer {
/** Plugin container for server-side transformations */
pluginContainer: PluginContainer;
/** Transform modules for SSR execution */
ssrTransform(code: string, url: string): Promise<SSRTransformResult>;
}SSR Development Features:
In production mode, buildServer generates optimized server bundles.
// Production server build output
// .nuxt/dist/server/
// ├── server.mjs // Main server entry
// ├── chunks/[hash].mjs // Code-split chunks
// └── manifest.json // Server manifestProduction Optimizations:
The buildServer function registers server-specific Vite plugins.
/**
* Vue feature flags plugin for server builds
* @param nuxt - Nuxt instance
* @returns Vite plugin instance
*/
function VueFeatureFlagsPlugin(nuxt: Nuxt): Plugin;
/**
* Sourcemap preserver plugin for build pipeline integration
* @param nuxt - Nuxt instance
* @returns Vite plugin instance
*/
function SourcemapPreserverPlugin(nuxt: Nuxt): Plugin;Server builds integrate closely with Nitro, Nuxt's server engine.
/**
* Write development server configuration for Nitro integration
* @param nuxt - Nuxt instance
*/
function writeDevServer(nuxt: Nuxt): Promise<void>;
/**
* Write manifest files for server bundle resolution
* @param ctx - Build context with server information
*/
function writeManifest(ctx: ViteBuildContext): Promise<void>;Nitro Integration Features:
Server builds adapt based on Nuxt's rendering mode.
SSR Mode (nuxt.options.ssr = true):
SPA Mode (nuxt.options.ssr = false):
Server builds use specialized module resolution for Node.js environments.
// Module resolution configuration
const resolveConfig = {
conditions: nitro.options.exportConditions, // Node.js export conditions
alias: {
// Server-specific aliases
'nitro/runtime': join(nuxt.options.buildDir, 'nitro.server.mjs'),
}
};Server builds include specialized error handling for SSR scenarios.
Error Handling Features:
Install with Tessl CLI
npx tessl i tessl/npm-nuxt--vite-builder