You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Vite打包Node.js JS文件时出现window未定义错误求助

解决Vite打包Node.js脚本时出现ReferenceError: window is not defined的问题

问题原因

你遇到的问题是因为Vite的lib模式默认偏向浏览器环境构建,即使配置了target: 'node18',也不会自动切换到Node环境的模块解析逻辑。axios的浏览器版本代码中引用了window对象,而Node环境不存在这个全局变量,因此运行时抛出错误。

解决方案

方案1:将axios标记为外部依赖(推荐)

这种方式不把axios打包进产物,而是让运行时直接从node_modules中加载Node版本的axios,避免环境不兼容问题。

修改vite.config.js:

import { resolve } from 'path'
import { defineConfig } from 'vite'

export default defineConfig({
    build: {
        target: 'node18',
        lib: {
            entry: resolve(__dirname, 'index.js'),
            fileName: 'index',
            formats: ['cjs'],
        },
        rollupOptions: {
            // 标记axios为外部依赖,不参与打包
            external: ['axios'],
        },
    },
})

执行打包命令后,运行node dist/index.js即可正常执行,前提是你已经通过npm install axios安装了依赖。

方案2:强制使用axios的Node版本

如果你需要将axios打包进产物,可以通过别名配置强制Vite使用axios的Node适配版本:

修改vite.config.js:

import { resolve } from 'path'
import { defineConfig } from 'vite'

export default defineConfig({
    resolve: {
        alias: {
            // 指定使用axios的Node环境版本
            axios: resolve(__dirname, 'node_modules/axios/dist/node/axios.cjs'),
        },
    },
    build: {
        target: 'node18',
        lib: {
            entry: resolve(__dirname, 'index.js'),
            fileName: 'index',
            formats: ['cjs'],
        },
    },
})

方案3:启用Vite的SSR模式

Vite的SSR模式专门针对服务端(Node)环境优化构建逻辑,开启后会自动适配Node环境的模块解析:

修改vite.config.js:

import { resolve } from 'path'
import { defineConfig } from 'vite'

export default defineConfig({
    ssr: {
        target: 'node',
    },
    build: {
        target: 'node18',
        lib: {
            entry: resolve(__dirname, 'index.js'),
            fileName: 'index',
            formats: ['cjs'],
        },
    },
})

验证

完成配置修改后,重新执行:

npx vite build
node dist/index.js

此时应该能正常输出HTTP状态码(如200)。

内容的提问来源于stack exchange,提问作者Lucas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 07:21:24