必须先确保VSCode终端能执行node -v并输出版本号,否则所有后续配置(如envFile、NODE_ENV、NODE_OPTIONS)均无效;macOS/Linux需从终端启动VSCode,Windows需检查系统Path;.env文件须UTF-8无BOM且位于工作区根目录;npm脚本需dotenv支持,NODE_OPTIONS需通过terminal.integrated.env.*或launch.json runtimeArgs配置。

VSCode终端执行node -v没输出,就别谈环境变量
所有后续配置都建立在node命令能被VSCode终端识别的基础上。如果node -v返回空或command not found,说明PATH根本没继承进来,此时配envFile或NODE_ENV全是徒劳。
macOS/Linux:从终端启动VSCode,而不是Dock或Spotlight——执行code --no-sandbox .;改过~/.zshrc后必须彻底退出所有VSCode窗口再重开
Windows:检查「系统属性 → 高级 → 环境变量」中「系统变量」的Path是否包含C:\Program Files\nodejs\;路径含空格或斜杠方向写成C:/Program Files/nodejs/都会失效
验证唯一标准:在VSCode内置终端(Ctrl + `)里敲node -v,有版本号才能往下走
launch.json里用envFile读.env文件,但别漏了路径和编码
envFile只在调试时生效,不影响终端运行或npm脚本,它本质是把.env内容注入到Node进程的process.env里。
确保.env文件在工作区根目录(即${workspaceFolder}下),否则envFile路径需显式写成"${workspaceFolder}/.env"
文件编码必须是UTF-8无BOM,否则中文值会变成乱码;Windows下若用记事本保存过,大概率已带BOM,换VSCode或Notepad++另存为UTF-8
示例配置片段:
{
"configurations": [
{
"type": "pwa-node",
"request": "launch",
"name": "Launch Program",
"program": "${file}",
"envFile": "${workspaceFolder}/.env"
}
]
}
注意:envFile不支持多层嵌套加载(比如.env.local不会自动合并),要手动写全
想让npm start也读.env,就得靠dotenv + package.json脚本
VSCode的envFile对npm start完全无效——npm跑的是独立shell进程,不读VSCode调试配置。
正确做法是在项目里装dotenv,并在入口JS文件顶部加:
require('dotenv').config();
然后在package.json里定义脚本:
"scripts": {
"start": "node index.js",
"dev": "node --inspect index.js"
}
这样无论你在终端敲npm start,还是在VSCode里用launch.json跑npm run dev,都能读到.env
别用cross-env NODE_ENV=development npm start硬编码——它覆盖.env里的同名变量,且无法处理多行或注释
NODE_OPTIONS和--max-old-space-size这类参数得走terminal.integrated.env.*
像--max-old-space-size=4096这种V8参数,不能塞进envFile,也不能写在package.json脚本里(除非你手动加node前缀),它们属于Node运行时选项,必须通过环境变量NODE_OPTIONS透传。
在VSCode设置里搜terminal.integrated.env,按系统选对应项:
- Windows:设
terminal.integrated.env.windows为{"NODE_OPTIONS": "--max-old-space-size=4096"} - macOS/Linux:设
terminal.integrated.env.linux或terminal.integrated.env.osx
注意:这个配置只影响VSCode集成终端,不影响调试器;调试时要额外在launch.json的runtimeArgs里加:
"runtimeArgs": ["--max-old-space-size=4096"]
容易忽略的一点:NODE_OPTIONS会被所有子进程继承,如果项目里用了child_process.fork(),新进程也会带上这个内存限制——可能超出预期


















