sublime text 不运行 node.js,而是调用系统 node 命令;报错“node not recognized”主因是图形界面启动时未继承 shell 的 path,应硬编码 which node 输出的绝对路径到 .sublime-build 的 "cmd" 数组中。

Sublime Text 本身不运行 Node.js,它只调用你系统里已安装的 node 命令;所有“配置失败”的根本原因,90% 是终端能跑 node -v,但 Sublime 启动时没拿到正确的 PATH —— 尤其 macOS/Linux 图形界面下(Spotlight 或 Dock 启动),~/.zshrc 根本没加载。
为什么 Ctrl+B 报 “node is not recognized” 或 “command not found”
这不是 Sublime 的 bug,是环境变量继承断裂。Windows 上常见 Node.js 安装时漏勾 “Add to PATH”,或用了 Microsoft Store 版本(不写系统变量);macOS/Linux 则因图形会话不读 shell 配置文件,导致 which node 在终端有输出,但在 Sublime 里查不到。
- 先在终端执行
which node(macOS/Linux)或where node(Windows),拿到绝对路径,比如/opt/homebrew/bin/node或C:\Program Files\nodejs\node.exe - 别信
"shell": true能自动修复 PATH —— macOS 上它可能加载错 shell 配置,Windows 上反而容易卡住 - 最稳做法:把上面拿到的完整路径硬编码进构建系统的
"cmd"字段,彻底绕过 PATH 依赖
如何写一个真正生效的 .sublime-build 文件
文件名必须以 .sublime-build 结尾,且必须保存到 Packages/User/ 目录下(macOS 是 ~/Library/Application Support/Sublime Text/Packages/User/,Windows 是 %APPDATA%\Sublime Text\Packages\User\)。内容必须是合法 JSON,不能有注释、尾随逗号或单引号。
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
-
"cmd"必须是数组,例如["/opt/homebrew/bin/node", "$file"],不能写成字符串"node $file" -
"working_dir": "$file_path"不可省略——否则require('./utils')会因工作目录错误报Cannot find module -
"selector": "source.js"确保该构建系统只对.js文件启用 - Windows 用户若用 nvm-windows,得先在命令行执行
nvm use 18.18.2再启动 Sublime,否则node不在 PATH 里
运行带参数或需要交互的脚本为什么卡住
Sublime 的构建输出面板不支持 process.stdin,一旦脚本里有 readline、prompt() 或等待用户输入的逻辑,就会卡住或直接退出——这是机制限制,不是配置问题。
- 传固定参数可硬编码:
"cmd": ["node", "$file", "--port", "3000"] - 想临时传参?别在 Sublime 里折腾,直接切终端:
node index.js --debug - 中文输出乱码?加
"encoding": "utf-8",但更稳的是确保终端和系统 locale 一致
硬编码 node 绝对路径看着土,但它是最少意外的方案;很多人卡在反复改 "shell": true 和环境变量上,却忘了 which node 输出的路径,才是 Sublime 真正认的“node”。










