MacOS下Sublime TypeScript构建系统报错:env: node: No such file or directory
问题描述
我尝试在Sublime Text中配置TypeScript构建系统,配置内容如下:
{ "cmd": ["/Users/userName/.nvm/versions/node/v18.13.0/bin/ts-node","$file"], "selector": "source.ts" }
但运行时出现错误:
env: node: No such file or directory [Finished in 9ms with exit code 127] [cmd: ['/Users/alex/.nvm/versions/node/v18.13.0/bin/ts-node', '/Users/alex/Desktop/temp.ts']] [dir: /Users/alex/Desktop] [path: /opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin]
几乎相同配置的JavaScript构建系统却能正常运行:
{ "cmd": ["/Users/userName/.nvm/versions/node/v18.13.0/bin/node", "$file"], "selector": "source.js" }
终端执行which ts-node输出:
/Users/userName/.nvm/versions/node/v18.13.0/bin/ts-node
手动在终端运行/Users/userName/.nvm/versions/node/v18.13.0/bin/ts-node /Users/userName/Desktop/temp.ts也能正常工作。
问题分析与解决办法
问题原因
ts-node本质是基于Node.js的脚本,启动时会默认调用系统环境中的node命令,但Sublime Text的构建环境PATH里没有包含nvm管理的Node.js路径(从错误信息的path字段可确认这一点)。而直接调用Node.js二进制文件时,因为指定了绝对路径,无需依赖环境变量,所以能正常运行。
解决方法
方法1:给构建配置添加Node环境路径
在TypeScript构建配置中通过env字段,将nvm的Node路径加入到环境变量的PATH中:
{ "cmd": ["/Users/userName/.nvm/versions/node/v18.13.0/bin/ts-node","$file"], "selector": "source.ts", "env": { "PATH": "/Users/userName/.nvm/versions/node/v18.13.0/bin:$PATH" } }
方法2:指定ts-node使用的Node路径
通过--node-path参数直接告诉ts-node要使用的Node.js二进制文件绝对路径:
{ "cmd": ["/Users/userName/.nvm/versions/node/v18.13.0/bin/ts-node", "--node-path", "/Users/userName/.nvm/versions/node/v18.13.0/bin/node", "$file"], "selector": "source.ts" }
方法3:启用shell模式运行命令
开启shell: true,让Sublime Text使用终端的shell环境执行命令,从而继承nvm的环境配置:
{ "cmd": ["/Users/userName/.nvm/versions/node/v18.13.0/bin/ts-node", "$file"], "selector": "source.ts", "shell": true }
内容的提问来源于stack exchange,提问作者Alex Berk
相关产品推荐
相关产品推荐

