Ctrl+B报“node is not recognized”是因为Sublime GUI启动时不继承shell PATH,必须硬编码node绝对路径到.sublime-build的"cmd"数组中,并设"working_dir":"$file_path",保存至Packages/User/目录后手动选中该构建系统。

Ctrl+B 报 “node is not recognized” 是因为 Sublime 没继承你的 shell PATH
Sublime Text 从 Dock(macOS)、开始菜单(Windows)或桌面图标启动时,根本不会加载 ~/.zshrc、~/.bash_profile 或 Windows 系统环境变量。哪怕终端里 node -v 输出正常,Sublime 也看不到那个 node。这不是插件问题,也不是配置没保存,是 GUI 应用的固有行为。
解决办法只有一条:别指望它自动找 node,直接把绝对路径写死进构建配置里。
- macOS/Linux:在终端运行
which node,结果类似/opt/homebrew/bin/node或/usr/local/bin/node - Windows:在 CMD 或 PowerShell 运行
where node,结果类似C:Program Files odejs ode.exe(注意路径中反斜杠要写成双反斜杠\) - 千万别用
"cmd": ["node", "$file"]—— 这在 GUI 启动的 Sublime 里基本必挂
必须用数组形式写死路径,且 working_dir 不能省
"cmd" 字段必须是数组,不是字符串;"working_dir" 必须设为 "$file_path",否则 require('./config') 或 fs.readFile('data.json') 会报 MODULE_NOT_FOUND 或 ENOENT。
正确示例(macOS):
{
"cmd": ["/opt/homebrew/bin/node", "$file"],
"selector": "source.js",
"working_dir": "$file_path",
"encoding": "utf-8"
}
错误写法举例:
-
"cmd": "node $file"—— 字符串格式,Sublime 不识别 -
"cmd": ["node", "$file"]—— 没写绝对路径,GUI 下大概率失败 - 漏掉
"working_dir": "$file_path"—— 相对路径模块加载全崩 - 保存位置不对:必须存到
Packages/User/目录下,不是随便哪个文件夹
保存后记得手动选中构建系统,别信 Automatic
新建的 NodeJS.sublime-build 文件保存后,Sublime 不会自动把它设为当前构建系统。你得手动点菜单:Tools → Build System → NodeJS(不是 Automatic)。
常见误操作:
- 保存文件名写成
nodejs.sublime-build(小写)—— Sublime 有时不识别,建议首字母大写NodeJS.sublime-build - 保存到了错误目录,比如
Packages/Default/或桌面,必须是Packages/User/ - 文件内容有语法错误(比如多了一个逗号、少了一个引号),Sublime 不报错但构建失效
不想硬编码路径?唯一可行的替代方案是从终端启动 Sublime
如果你实在不想每次换机器都改路径,可以绕过 GUI 启动限制:在终端执行 subl(确保已配置 shell 命令),这样 Sublime 会继承当前 shell 的环境变量,"cmd": ["node", "$file"] 就能跑通。
但这只适用于开发时主动从终端打开 Sublime 的场景;用 Dock/Spotlight/开始菜单打开仍会失效。所以硬编码路径仍是跨设备、跨启动方式最稳的选择。
真正容易被忽略的点是:路径里的空格和中文字符。Windows 上 C:Program Files
odejs
ode.exe 中的空格没问题,但如果你自己装在 D:我的工具
odejs
ode.exe,Sublime 可能解析失败——这种路径最好重装到无空格、无中文的目录。











