npm为何在错误路径查找node?出现/usr/bin/env: ‘node’不存在错误
问题原因与解决方案
为什么npm会查找/usr/bin/env/node?
npm的可执行文件开头使用了#!/usr/bin/env node的shebang声明,它会在当前环境的PATH变量里查找node可执行文件。而你用sudo运行命令时,系统会重置环境变量(包括PATH),默认不会继承当前用户通过nvm配置的PATH路径——nvm管理的node位于用户目录(/home/xxxxx/.nvm/versions/node/v16.16.0/bin/node),这个路径不在sudo的默认PATH里,所以/usr/bin/env找不到node。
非临时解决方法
1. 避免使用sudo安装依赖
nvm为当前用户管理node环境,所有npm操作(包括安装项目依赖、全局包)都不需要sudo。直接执行以下命令即可:
npm install --save typescript @types/node @types/react @types/react-dom @types/jest
这是最推荐的方式,符合nvm的使用规范,也不会修改系统文件。
2. 让sudo保留用户环境变量
如果确实需要用sudo执行(比如特殊权限场景),可以添加-E参数让sudo保留当前用户的环境变量(包括PATH):
sudo -E npm install --save typescript @types/node @types/react @types/react-dom @types/jest
这样sudo会继承你当前用户的PATH,就能找到nvm管理的node了。
内容的提问来源于stack exchange,提问作者Hawkeye Parker
相关产品推荐
相关产品推荐

