Browserify错误:/usr/bin/env:node:找不到文件或目录。

86

我通过apt-get install安装了Node.js和npm以及所有依赖项,然后安装了Browserify。

npm install browserify -g

安装过程看起来很顺利,没有出现任何问题,但是当我按照这个指南尝试进行简单的bundle时,却出现了以下错误:

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

enter image description here


我的Browserify可执行文件在/usr/local/bin/中,但它是否调用了其他路径导致路径出错? - Eduardo Dennis
我猜测browserify可执行文件使用了shebang,例如“#!/usr/bin/env node”。这告诉shell使用node二进制文件来执行以下代码。但是你的Linux可能没有这个确定node路径的/usr/bin/env助手。也许你可以搜索一下这是否是已知问题。 - bodokaiser
3
啊,你需要在Ubuntu系统中将nodejs链接到node上。Ubuntu将node安装为nodejs,因此你需要执行类似于"ln -s /usr/bin/nodejs /usr/bin/node"的命令,以便系统也可以将其识别为node。 - bodokaiser
1
解决了 :-P 我已经为此苦苦思索了一个小时,你能否以答案格式回复一下? - Eduardo Dennis
1
很高兴它能够正常工作,之前不确定是否出现问题,所以先进行了评论 :) - bodokaiser
显示剩余4条评论
9个回答

253

一些Linux发行版将nodejs安装为"nodejs"可执行文件,而非"node"。

在这种情况下,您需要手动链接到"node",因为许多包都是在"node"二进制文件之后编程的。类似的情况也会出现在未链接到"python"的"python2"上。

在这种情况下,您可以进行简单的符号链接。对于将软件包二进制文件安装到/usr/bin的Linux发行版,您可以执行以下操作:

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

5
因为/usb/sbin/node是ax24-node(与nodejs无关),所以这不是Ubuntu 14.04的解决方法。仅仅通过符号链接到/usr/bin/node也行不通,因为$PATH中首先出现的是/usr/sbin/node - Gareth
8
解决这个问题的正确方法是使用update-alternatives。在这里查看我的答案:https://dev59.com/RmEi5IYBdhLWcg3w2fYm#24592328。 - airtonix
1
实际上,如果你想破坏你的系统,像这样在符号链接二进制文件之间移动是一个很好的习惯。 - airtonix
1
@EduardoDennis,是的,请使用update-alternatives。它就是为这些确切情况而存在的。 - airtonix
谢谢bodokaiser!我不太清楚为什么npm包browserify需要node来运行...它的命令是如何启动的? - Alexander Suraphel
显示剩余3条评论

53

新的回答:

  1. 卸载通过系统软件包管理器(dnf,apt-get等)安装的任何nodejs包,并删除您每次升级时重建的任何愚蠢的符号链接(lol)。
  2. 安装NVM,
  3. 使用nvm安装nodejs:nvm install 6

旧的回答:

任何关于创建符号链接或安装其他node-package的讨论都是无稽之谈并且不可持续。

正确的解决方法是:

  1. 像以前一样使用apt-get简单地安装nodejs包
  2. 使用update-alternatives指定您的nodejs二进制文件负责#!/usr/bin/env node

就像这样:

sudo apt-get install nodejs
sudo update-alternatives --install /usr/bin/node nodejs /usr/bin/nodejs 100

现在,这种可持续性将在软件包升级、发行版升级等过程中得以保持。


这是我问题的解决方案 https://dev59.com/LF8e5IYBdhLWcg3wCW12 - Alon Carmel
谢谢,非常好的解决方案。 符号链接的技巧虽然在网络上被重复提到,但对我来说并没有起作用。 - Emilia Tyl
现在的正确答案是在Linux上使用NVM,在Windows上使用Nodist。 - airtonix
2022年更新:nvm很好,但你真的应该考虑使用ASDF。 - airtonix

35
运行 apt-get install nodejs-legacy
某些 Linux 发行版已更改了 node.js 二进制文件的名称,导致其与许多 node.js 包不兼容。包 nodejs-legacy 提供符号链接以解决此问题。

2
这是针对Ubuntu 14.04的解决方案,因为/usb/sbin/node是ax24-node(与nodejs无关)。仅将符号链接到/usr/bin/node不起作用,因为/usr/sbin/node出现在$PATH中。 - Gareth
帮了我一把。谢谢! - Lapidus
apt-get install nodejs-legacy。对于Windows用户,“apt-get”不被识别为内部或外部命令、可操作的程序或批处理文件。 - Swift

8
您也可以使用 NVMNodejs 版本管理器 安装 Nodejs。使用版本管理器有很多好处,其中之一是您不必担心这个问题。

操作说明:

sudo apt-get update
sudo apt-get install build-essential libssl-dev

在安装必备软件包后,您可以从该项目的GitHub页面下载nvm安装脚本。版本号可能不同,但通常情况下,您可以使用以下语法下载并安装它:

curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | sh

这将下载脚本并运行它。它将把软件安装到您的主目录下的子目录~/.nvm中。它还将在您的~/.profile文件中添加必要的行以使用该文件。
要使用 nvm 功能,您需要退出并重新登录,或者您可以源化 ~/.profile 文件,以使当前会话了解更改:
source ~/.profile

现在您已经安装了nvm,可以安装独立的Node.js版本。
要查找可用于安装的Node.js版本,请键入:
```bash nvm ls-remote ```
nvm ls-remote
. . .

v0.11.10
v0.11.11
v0.11.12
v0.11.13
v0.11.14

您可以看到,目前最新版本为v0.11.14。您可以通过输入以下命令进行安装:

nvm install 0.11.14

通常情况下,nvm会切换到最近安装的版本。您可以通过输入以下命令来明确告诉nvm使用我们刚下载的版本:
nvm use 0.11.14

当您使用nvm安装Node.js时,可执行文件被称为node。您可以通过输入以下命令来查看当前在shell中使用的版本:
node -v

完整的教程可以在这里找到。


是的,环境版本管理器加一分。尽管我们都提供了正确的解决方案,但这绝对是一个更好的答案。我会说nvm更适用于交互式工作站而不是生产服务器(但我不知道为什么不能在那里使用它)......个人倾向于在生产中使用docker镜像。 - airtonix

3

@Swift Mac OS X没有apt-get命令。请参考https://stackoverflow.com/questions/37369363/whats-the-equivalent-of-ubuntus-apt-get-command-on-a-mac - kamikater

0

我在Linux上构建Atom时遇到了相同的问题。

sudo apt-get install nodejs-dev

修正我的问题,希望对你有所帮助。


0
  1. 运行命令 which node,结果将会是:

    /home/moh/.nvm/versions/node/v8.9.4/bin/node

  2. 复制上面得到的路径,然后运行第3步的命令。

  3. ln -s /home/moh/.nvm/versions/node/v8.9.4/bin/node /usr/bin/node


0

如果您不想使用符号链接,可以尝试以下方法。 在Ubuntu中可行。

#!/usr/local/bin/node --harmony

harmony标签是用于新的ECMAscript Harmony


-1
你需要调用 "nodejs" 而不是 "node"。要验证这一点,请在 shell 上键入 node -v:如果没有找到任何内容,请尝试 nodejs -v。如果显示了一个版本号,则应该使用的命令是 nodejs 而不是 node。因此,你需要将脚本中对 browserify 的调用从 node 更改为 nodejs(如下所示):replace
#!/usr/bin/env node

使用

#!/usr/bin/env nodejs

你可能还需要以超级用户身份打开脚本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接