Express.js:否此类文件或目录

时间:2013-02-16 20:19:31

标签: node.js ubuntu fedora

我用apt-get install nodejs安装了节点。然后我用apt-get install npm安装了npm。现在,当我尝试运行express时,我得到了

$ express 
/usr/bin/env: node: No such file or directory

如何解决此错误?

6 个答案:

答案 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,

  1. 版本由发行版(Debian / Ubuntu)使用apt-get
  2. 安装 由n latest安装的
  3. 版本。
  4. 拥有发行版的旧版本没有意义。而且,更糟糕的是,如果该版本有效,它可能会安装到不同的位置,并在其中进行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