vscode调试时node_env未生效是因为调试器只读取launch.json中env字段的显式配置,不继承shell、系统或终端环境变量;需在launch.json的env对象中明确设置"node_env": "value",且重启vscode生效。

VSCode终端里NODE_ENV没生效?先确认它根本没被读到
VSCode内置终端不自动继承你shell里export的NODE_ENV,也不管package.json的scripts字段——它只认启动时注入的环境变量。直接在终端里执行echo $NODE_ENV(macOS/Linux)或echo %NODE_ENV%(Windows),输出为空就说明变量压根没传进去。
常见错误现象:用npm run dev能正常启动、NODE_ENV=development node app.js也能跑,但VSCode调试时process.env.NODE_ENV还是undefined。
- 别在
~/.zshrc里写export NODE_ENV=development——VSCode GUI启动时不加载它 - Windows用户别依赖系统环境变量面板里的NODE_ENV——VSCode调试器默认不继承系统级变量
- 改完任何配置后必须彻底关闭所有VSCode窗口再重开,
Developer: Reload Window无效
launch.json里env字段必须显式声明NODE_ENV
这是最直接、最可控的方式。VSCode调试器只认launch.json中env对象里写的值,和终端、shell、系统变量完全隔离。
示例(开发环境):
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug Dev",
"program": "${workspaceFolder}/src/server.js",
"env": {
"NODE_ENV": "development",
"PORT": "3000"
}
}
]
}
示例(生产环境):
{
"type": "node",
"request": "launch",
"name": "Debug Prod",
"program": "${workspaceFolder}/dist/server.js",
"env": {
"NODE_ENV": "production",
"PORT": "8080"
}
}
-
env是对象,不是字符串;写成"env": "NODE_ENV=production"会直接报错 - 多个环境共存时,靠
name区分配置项,F5调试前手动选对应条目 - 如果项目用了
dotenv,env字段仍优先——它会覆盖.env文件里同名变量
terminal.integrated.env.*注入只影响终端,不影响调试器
很多人以为配了terminal.integrated.env.linux就能让node app.js也带上NODE_ENV,其实这只是给VSCode内置终端加环境变量,和launch.json调试完全无关。
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
适用场景:你习惯在终端里手动运行NODE_ENV=production node dist/server.js,想省掉每次敲前缀。
macOS/Linux配置示例(写入settings.json):
"terminal.integrated.env.linux": {
"NODE_ENV": "production"
}
Windows配置示例:
"terminal.integrated.env.windows": {
"NODE_ENV": "production"
}
- 这个配置对
F5调试完全无效,别指望它解决断点里process.env.NODE_ENV为空的问题 - 路径类变量如
PATH可以叠加,但纯业务变量如NODE_ENV会被覆盖,不是追加 - 局部配置(项目根目录
.vscode/settings.json)优先级高于全局设置
多环境切换时最容易忽略的坑:runtimeExecutable和program路径不一致
当你为开发/生产分别建了两个launch.json配置,但runtimeExecutable指向了不同Node版本,而program又没同步更新路径,就会出现“环境变量对了,但代码行为不对”的诡异问题。
比如开发用nvm管理的v18,生产用volta锁死的v20,runtimeExecutable写了/Users/xxx/.nvm/versions/node/v18.17.0/bin/node,但program却指向dist/server.js(该文件本应由v20解析)。
- 务必用
console.log(process.execPath)验证实际运行的Node路径是否与runtimeExecutable一致 -
program路径要匹配目标Node版本的模块解析规则:ESM项目用"type": "module"时,v14+可直接跑.js,v12则可能需要--experimental-modules - 生产环境若用
pm2或docker部署,VSCode调试配置只是本地模拟,别让它和真实部署逻辑产生耦合










