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

Eva*_*oll 51 ubuntu fedora node.js

我安装了节点apt-get install nodejs.然后我安装了npm apt-get install npm.现在,当我尝试跑步时,express我得到了

$ express 
/usr/bin/env: node: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

Eva*_*oll 106

Ubuntu中有两个包含类似名称的包,nodenodejs.

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
Run Code Online (Sandbox Code Playgroud)

或者,在节点的情况下,我建议使用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
Run Code Online (Sandbox Code Playgroud)

还有其他二进制发行版管理器,甚至可以使用shell脚本,nvm但我个人更喜欢n.想象一下n只适用于一件事:它安装的节点二进制文件/usr/local/bin.

为什么删除npm?不是.apt-get --purge remove过移除由包管理器安装的东西.n latest在包管理器之外工作.如果你这样做,有两个npms,

  1. 由发行版(Debian/Ubuntu)安装的版本使用apt-get.
  2. 版本安装n latest.

拥有发行版的旧版本没有意义.而且,更糟糕的是,如果该版本有效,它可能会安装到不同的位置,并在其中进行Debian修改,假定Debian安装目录.最好使用/或两者兼而有之.

  • 我有点困惑,为什么你最后删除npm?不是还需要吗? (3认同)
  • 很好的解释.这是我遇到的最愚蠢的错误之一...不是包维护者应该确保这样的事情不会发生? (2认同)
  • 不,你可以只有一个名为"node"的二进制文件和任何合理的软件包管理器,但是一个合理的发行版会意识到,由于十年前修复了一个软件包而使许多人感到不安,这是没有意义的.这是git的重复,与git-core相比. (2认同)

Ser*_*eev 21

你应该安装nodejs-legacy软件包,它有一个从/ usr/bin/node到/ usr/bin/nodejs的链接

$ sudo apt-get install nodejs-legacy