我用apt-get install nodejs
安装了节点。然后我用apt-get install npm
安装了npm。现在,当我尝试运行express
时,我得到了
$ express
/usr/bin/env: node: No such file or directory
如何解决此错误?
答案 0 :(得分:106)
Ubuntu中有两个名称相似的包, node 和 nodejs 。
node
这样做,
Description-en:业余分组无线电节点程序。节点程序接受TCP / IP和分组无线网络连接,并为用户提供一个接口,允许它们使用各种业余无线电协议建立到远程主机的网关连接。
nodejs
这样做,
Description-en:Node.js基于事件的服务器端javascript引擎Node.js在设计上与Ruby的Event Machine或Python的Twisted等系统相似并受其影响。它使事件模型更进一步 - 它将事件循环呈现为语言结构而不是库。 Node.js捆绑了几个有用的库来处理服务器任务:系统,事件,标准I / O,模块,定时器,子进程,POSIX,HTTP,多部分解析,TCP,DNS,断言,路径,URL,查询字符串。
Fedora也遵循类似的包命名方案。因此,nodejs
中的二进制文件必须从原始nodejs
重命名为node
。但是,这在技术上并不是犹太人的:大多数nodejs程序(以及用npm安装的库)都假设节点二进制文件是node
。如果你想绕过这个,最简单的方法就是将两者合二为一。如果采用这种方式,请不要安装处理业余数据包无线电设备的node
包。
sudo ln -s /usr/bin/nodejs /usr/local/bin/node
或者,对于节点,我建议使用n
而不是安装node
。只需安装npm(将安装节点),然后删除npm,然后告诉apt清理它。为此,只需运行
sudo apt-get install npm
sudo npm install -g n
sudo n latest
sudo apt-get --purge remove npm
sudo apt-get autoremove
还有其他二进制发行版管理器甚至可以使用像nvm
这样的shell脚本,但我个人更喜欢n
。将n
视为仅适用于一件事的东西:它安装到/usr/local/bin
的节点二进制文件。
为什么删除npm?不是。 apt-get --purge remove
只能 删除包管理器安装的内容。 n latest
在包管理器之外工作。如果你这样做,有两个npms,
apt-get
。n latest
安装的拥有发行版的旧版本没有意义。而且,更糟糕的是,如果该版本有效,它可能会安装到不同的位置,并在其中进行Debian修改,假定Debian安装目录。最好使用/或两者兼而有之。
答案 1 :(得分:21)
你应该安装nodejs-legacy软件包,它有一个从/ usr / bin / node到/ usr / bin / nodejs的链接
$ sudo apt-get install nodejs-legacy
答案 2 :(得分:4)
在我的情况下,这是因为在我的PATH
环境变量中,我有“〜/ progs / node / bin /”而“〜”似乎没有由env
解决。用真正的完整路径替换它(“/ home / myuser / node / bin”)解决了我的问题。
答案 3 :(得分:2)
此解决方案
export PATH="$HOME/opt/nodejs/bin:$PATH"
为我解决了这个问题(应该假设$ HOME变量设置正确)。它还允许我避免硬编码到我的主目录的路径(例如,如果我需要,我可以将我的.bash_profile重用于不同的帐户/服务器)
答案 4 :(得分:0)
在cmd中执行此操作
sudo apt-get install nodejs-legacy
chmod your folder 700 (optional)
答案 5 :(得分:0)
免责声明:仅适用于通过部署工具运行的bash命令
注意::在远程服务器中,如果可以运行node命令,但通过诸如shipit服务器之类的部署工具,则抛出/usr/bin/env: ‘node’: No such file or directory
之类的异常。创建符号链接将解决错误。
sudo ln -s $(which node) /usr/bin/node
sudo ln -s $(which npm) /usr/bin/npm
sudo ln -s $(which pm2) /usr/bin/pm2