我用apt-get install nodejs
. 然后我用apt-get install npm
. 现在,当我尝试跑步时,express
我得到了
$ express
/usr/bin/env: node: No such file or directory
如何解决此错误?
Ubuntu 中有两个具有相似名称的包,node和nodejs。
node
做这个,
描述-en:业余分组无线电节点程序。节点程序接受 TCP/IP 和分组无线电网络连接,并为用户提供一个接口,允许他们使用各种业余无线电协议与远程主机建立网关连接。
nodejs
做这个,
描述: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
. 如果你想解决这个问题,最简单的方法就是将两者符号链接在一起。如果您采用这条路线,请不要安装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
还有其他二进制发行版管理器甚至可以使用 shell 脚本,nvm
但我个人更喜欢n
. 只考虑n
一件事:它安装到的节点二进制文件/usr/local/bin
。
为什么要删除 npm?不是。apt-get --purge remove
只能删除包管理器安装的东西。n latest
在包管理器之外工作。如果你这样做,有两个 npms,
apt-get
.n latest
。拥有发行版的旧版本毫无意义。而且,更糟糕的是,如果该版本有效,它可能会安装到不同的位置,并在其中进行 Debian 修改,假设 Debian 安装目录。最好使用其中一个/或但不要同时使用两者。
你应该安装 nodejs-legacy 包,它有一个从 /usr/bin/node 到 /usr/bin/nodejs 的链接
$ sudo apt-get install nodejs-legacy
在我的情况下,这是因为在我的PATH
环境变量中,我有“~/progs/node/bin/”,而“~”似乎没有通过env
......用真正的完整路径替换它来解决(“/home/ myuser/node/bin") 解决了我的问题。
这个解决方案
export PATH="$HOME/opt/nodejs/bin:$PATH"
为我解决了这个问题(假设 $HOME 变量设置正确,它应该可以工作)。它还允许我避免对主目录的路径进行硬编码(例如,如果需要,我可以将我的 .bash_profile 与不同的帐户/服务器重用)
在 cmd 中执行此操作
sudo apt-get install nodejs-legacy
chmod your folder 700 (optional)
免责声明:仅适用于通过部署工具运行的 bash 命令
注意:在远程服务器中,如果您可以运行节点命令,但通过像 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