根本原因是sublime gui启动时未继承shell的path,需硬编码which node或where node获取的绝对路径到"cmd":["node","$file"]数组中,并设"working_dir":"$file_path"和"encoding":"utf-8"。

Ctrl+B 运行 JS 文件后控制台空白、一闪而过、中文变问号,或报 node is not recognized——根本不是 Sublime 有问题,而是它压根没调到你系统里的 node 命令,或者调到了但工作目录和编码全错。
为什么 node -v 在终端能用,Sublime 却报错?
GUI 启动的 Sublime(比如从 Dock、开始菜单、Spotlight 打开)不加载你的 shell 配置(~/.zshrc、~/.bash_profile 或 Windows 的系统 PATH),所以即使 which node 返回 /opt/homebrew/bin/node,Sublime 也看不见这个路径。
- macOS/Linux:别信“PATH 已设置”,必须用
which node拿到绝对路径,硬写进构建配置 - Windows:运行
where node,注意路径含空格时得写成"C:/Program Files/nodejs/node.exe"(正斜杠更稳) - 用了
nvm?终端里nvm use 18之后再which node,否则取到的是默认版本甚至软链
cmd 必须是数组,不能是字符串,且不能用 shell_cmd
"cmd": ["node", "$file"] 是唯一可靠写法;"cmd": "node $file" 或 "shell_cmd": "node \"$file\"" 都会失效——前者 Sublime 直接忽略,后者让 "encoding": "utf-8" 彻底失能,中文输出必乱码。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 数组格式才能配合
"working_dir"和"encoding"生效 -
"shell_cmd"走的是系统 shell 解码逻辑(Windows 默认 GBK),Node.js 输出 UTF-8,对不上就显示??? - 哪怕你确定 PATH 没问题,也建议直接写死路径,比如
"cmd": ["/opt/homebrew/bin/node", "$file"]
working_dir 不设成 "$file_path",require('./utils') 就一定失败
Sublime 默认以自身安装目录或用户主目录为工作路径,fs.readFile('config.json') 会去错地方找文件,报 ENOENT 或 MODULE_NOT_FOUND。
-
"working_dir": "$file_path"让 Node.js 的相对路径行为和你在终端里cd /path/to && node index.js完全一致 -
$file_path结尾不带斜杠,但require和fs能正确识别,不用额外加/ - 如果脚本依赖同目录下
package.json或node_modules,这步漏掉等于白配
控制台中文乱码?只靠 "encoding": "utf-8" 不够,还得文件本身是无 BOM 的 UTF-8
Sublime 控制台输出乱码,90% 是编码链断裂:Node.js 输出 UTF-8 → Sublime 用系统 locale 解码 → 显示问号。显式加 "encoding": "utf-8" 能修复,但前提是构建配置用的是 cmd 数组,且你的 JS 文件保存时没带 BOM。
- 在 Sublime 里打开 JS 文件,右下角状态栏看编码,点开选
Convert to UTF-8再Save - 不要选
UTF-8 with BOM,BOM 会导致 Node.js 解析报错或输出异常 - Windows 用户尤其要注意:CMD 默认 GBK,但 Sublime 构建系统只要配对了
cmd + encoding + working_dir,就能绕过 CMD 的限制
最易被忽略的其实是启动方式——哪怕所有配置都对,你从开始菜单点开 Sublime,它依然可能看不到 nvm 切的版本;真要省事,就在终端里执行 subl 启动编辑器,这样 PATH 和 shell 环境才真正继承过来。










