Express.js:没有这样的文件或目录

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

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

我该如何解决这个错误?

Ubuntu中有两个名称相似的包, nodenodejs

node做到这一点,

Description-en:业余分组无线电节点程序。 节点程序接受TCP / IP和分组无线电networking连接,为用户提供一个接口,允许他们使用各种业余无线电协议build立到远程主机的网关连接。

nodejs这样做,

描述-en:Node.js基于事件的服务器端javascript引擎Node.js在devise上与Ruby的Event Machine或者Python的Twisted系统相似,并且受其影响。 它使事件模型更进一步 – 它将事件循环呈现为语言结构而不是库。 Node.js捆绑了几个有用的库来处理服务器任务:系统,事件,标准I / O,模块,定时器,subprocess,POSIX,HTTP,多部分parsing,TCP,DNS,断言,path,URL,查询string。

Fedora也遵循类似的软件包命名scheme。 因此, nodejs的二进制nodejs必须从原始node重命名为nodejs 。 但是,这在技术上并不是犹太教:大多数nodejs程序(和npm安装的库)假定节点二进制文件是node 。 如果你想解决这个问题,最简单的方法就是把两者联系在一起。 如果你走这条路,不要安装处理业余数据包收音机东西的node包。

 sudo ln -s /usr/bin/nodejs /usr/local/bin/node 

或者,在节点的情况下,我build议使用n而不是安装node 。 只需安装npm(将安装节点),然后删除npm,然后告诉apt来清理它。 要做到这一点,只需运行

 sudo apt-get install npm sudo npm install -gn sudo n latest sudo apt-get --purge remove npm sudo apt-get autoremove 

还有其他的二进制发行版pipe理器,甚至可以像nvm这样的shell脚本工作,但我个人更喜欢n 。 把n想象成只是一件事:它安装到/usr/local/bin的节点二进制文件。

为什么要删除npm? 不是。 apt-get --purge remove 只能删除包pipe理器安装的东西。 n latest作品在包pipe理者之外。 如果你这样做有两个npms,

  1. 版本(Debian / Ubuntu)使用apt-get
  2. 版本n latest安装。

没有发行发行版的旧版本的意义。 更糟糕的是,如果这个版本能够工作的话,它可能会安装到不同的位置,并且在Debian中修改Debian安装目录。 最好使用/或而不是两者。

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

$ sudo apt-get install nodejs-legacy

在我的情况下,这是因为在我的PATH环境variables中,我有“〜/ progs / node / bin /”和“〜”似乎没有被env解决…用真正的完整path(“ home / myuser / node / bin“)解决了我的问题。

这个解决scheme

 export PATH="$HOME/opt/nodejs/bin:$PATH" 

为我解决这个问题(它应该工作假设$ HOMEvariables设置正确)。 它也使我可以避免硬编码到我的主目录的path(例如,如果需要,我可以重用我的.bash_profile与不同的帐户/服务器)

在cmd中执行此操作

 sudo apt-get install nodejs-legacy chmod your folder 700 (optional)