【问题标题】:Express.js: No Such file or directoryExpress.js:没有这样的文件或目录
【发布时间】:2019-11-19 10:37:55
【问题描述】:

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

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

如何解决此错误?

【问题讨论】:

    标签: node.js ubuntu fedora


    【解决方案1】:

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

    node 这样做,

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

    nodejs 这样做,

    Description-zh:Node.js 基于事件的服务器端 javascript 引擎 Node.js 在设计上与 Ruby 的 Event Machine 或 Python 的 Twisted 等系统相似并受其影响。它使事件模型更进一步——它将事件循环呈现为一种语言结构,而不是一个库。 Node.js 捆绑了几个有用的库来处理服务器任务:系统、事件、标准 I/O、模块、计时器、子进程、POSIX、HTTP、多部分解析、TCP、DNS、断言、路径、URL、查询字符串。

    Fedora 也遵循类似的包命名方案。因此,nodejs 中的二进制文件必须从原来的 node 重命名为 nodejs。但是,从技术上讲,这并不合理:大多数 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
    

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

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

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

    拥有发行版的旧版本毫无意义。而且,更糟糕的是,如果该版本有效,它可能会安装到不同的位置,并在其中包含假定 Debian 安装目录的 Debian 修改。最好使用其中一种/或两种,但不要同时使用。

    【讨论】:

    • 很好的解释。这是我遇到过的最愚蠢的错误之一……难道软件包维护者不应该确保不会发生这样的事情吗??
    • 不,任何合理的包管理器只能有一个名为 node 的二进制文件,但是一个合理的发行版会意识到,由于十年前最后一个错误修复的包给很多人带来了不便,请没有意义。这是 git 与 git-core 的重复。
    • 我对此有点困惑,为什么最后要删除npm?还不需要吗?
    • @JensBodal 我也在想同样的事情。但我注意到我的 npm 得到了更新,但最终没有被删除。我运行了这个答案中提到的所有命令。
    • 更新了答案@JensBodal
    【解决方案2】:

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

    $ sudo apt-get install nodejs-legacy

    【讨论】:

      【解决方案3】:

      在我的情况下,这是因为在我的 PATH 环境变量中,我有“~/progs/node/bin/”,而“~”似乎没有被 env 解决...替换为真正的完整路径(“/home/myuser/node/bin”)解决了我的问题。

      【讨论】:

      • 太棒了!你是怎么找到的?
      • 通过尝试各种不同的疯狂的事情...... :)
      【解决方案4】:

      这个解决方案

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

      为我解决了这个问题(假设 $HOME 变量设置正确,它应该可以工作)。它还允许我避免对主目录的路径进行硬编码(例如,如果需要,我可以将我的 .bash_profile 与不同的帐户/服务器重用)

      【讨论】:

        【解决方案5】:

        在 cmd 中执行此操作

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

        【讨论】:

          【解决方案6】:

          免责声明:仅适用于通过部署工具运行的 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
          

          【讨论】:

            猜你喜欢
            • 2016-12-02
            • 2021-06-24
            • 2015-02-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-05
            • 2012-06-17
            相关资源
            最近更新 更多