Sublime Text 配置 Node.js 必须硬编码 node 绝对路径、设 "working_dir": "$file_path" 和 "encoding": "utf-8",因其 GUI 启动不继承 shell PATH,导致 Ctrl+B 报 'node is not recognized'。

能直接跑,但必须绕过 Sublime 的 PATH 继承缺陷——它不读你的 ~/.zshrc 或系统环境变量,所以别指望 node -v 在终端能用,Ctrl+B 就自动好使。
为什么 Ctrl+B 报 'node' is not recognized
这不是 Sublime 故意搞事,是它启动时的环境太干净:macOS/Linux 从 Dock 或 Spotlight 启动,根本没加载 shell 配置;Windows 上要么 Node.js 安装时漏勾 Add to PATH,要么用了 Microsoft Store 版(不写系统变量)。你终端里能跑 node -v,只说明 shell 环境对,不代表 Sublime 进程也继承到了。
怎么写一个真正能用的 NodeJS.sublime-build
核心就三件事:路径写死、工作目录设对、编码保 UTF-8。别信“自动探测”,Sublime 不干这活。
根据 package.json 中的 engines 字段自动检测 Node.js 版本需求,未安装 nvm 时自动安装并切换至对应版本。支持 Windows、macOS、Linux。适用于 Node.js 项目开发、版本切换和环境配置。
-
"cmd"必须是数组,且填绝对路径:["/opt/homebrew/bin/node", "$file"](macOS M1/M2)、["/usr/local/bin/node", "$file"](Intel Mac/Linux)、["C:/Program Files/nodejs/node.exe", "$file"](Windows) -
"working_dir": "$file_path"不能省——否则require('./config')或fs.readFile('data.json')全部从 Sublime 安装目录开始找,不是你的项目目录 -
"encoding": "utf-8"加上,避免中文日志乱码;"selector": "source.js"确保只对.js文件生效
用 nvm 或 volta 管 Node 版本怎么办
nvm 的本质是每次 shell 启动时动态改 PATH,但 Sublime 构建进程不执行 nvm use,也不 source 你的配置文件。所谓“支持多版本”,其实是手动指定当前版本的真实二进制路径:
- 先在终端切到目标版本:
nvm use 18.18.2 - 再查真实路径:
nvm which 18.18.2→ 输出类似~/.nvm/versions/node/v18.18.2/bin/node - 把这个路径填进
cmd数组,注意展开~成绝对路径(比如/Users/you/.nvm/versions/node/v18.18.2/bin/node)
最易被忽略的是 working_dir —— 很多人配好了 node 路径却 still 报 MODULE_NOT_FOUND 或 ENOENT,其实只是因为脚本里一行 require('./utils') 找错了地方。

















