ChatGPT解决这个技术问题 Extra ChatGPT

无法在 Ubuntu 中使用节点包管理器安装包

由于与另一个包的名称冲突,Ubuntu 上的 NodeJS 解释器名称 (node) 已重命名为 nodejs。这是自述文件的内容。 Debian 说:

Node.js 解释器命令的上游名称是“node”。在 Debian 中,解释器命令已更改为“nodejs”。这样做是为了防止命名空间冲突:其他命令在其上游使用相同的名称,例如“node”包中的 ax25-node。必须将调用 Node.js 作为 shell 命令的脚本改为使用“nodejs”命令。

但是,使用 nodejs 会妨碍使用 npm 安装软件包。软件包安装失败并出现以下错误:

sh: 1: node: not found npm WARN 这个失败可能是由于使用了旧的二进制“node” npm WARN 更多解释,请阅读/usr/share/doc/nodejs/README.Debian

如何让 npm 理解系统上已经安装了 nodejs 但解释器名称不同?

您可以在 /usr/bin 中尝试 ln -s nodejs node。不过,这有点骇人听闻。
@vbo您可以将其添加为答案-它解决了问题!
@HimelNagRana我有另一个(更好的,接受的)答案。我最初的评论也被转换为答案 (stackoverflow.com/a/21168305/539686)。
使用 NVM 安装和管理 Node.js 版本,github.com/creationix/nvm,简单方便!
我强烈推荐这个解决方案:stackoverflow.com/a/38325376/3197383 可以随时控制节点和 npm 版本并用于任何用途。

K
KlwntSingh

TL;博士:

sudo apt-get install nodejs-legacy

首先让我澄清一下情况。 2012 年夏天,Debian 维护人员决定重命名 Node.js 可执行文件,以防止与另一个包发生某种命名空间冲突。对于 Debian 技术委员会来说,这是一个非常艰难的决定,因为它破坏了向后兼容性。

以下是 Debian mailing list 中发布的委员会决议草案的引述:

nodejs 包应更改为提供 /usr/bin/nodejs,而不是 /usr/bin/node。该软件包应声明与 Debian 中任何引用 /usr/bin/node 的软件包的关系。 nodejs 源包还应在 Priority: extra 提供 nodejs-legacy 二进制包,其中包含 /usr/bin/node 作为 /usr/bin/nodejs 的符号链接。存档中的任何包都不能依赖或推荐 nodejs-legacy 包,该包仅为上游兼容性而提供。此包声明还应声明与节点包的 Conflicts: 关系。 <...>

第 2 段是 OP 问题的实际解决方案。 OP 应该尝试安装此软件包,而不是手动进行符号链接。这是 Debian 软件包索引 website 中此软件包的链接。

它可以使用 sudo apt-get install nodejs-legacy 安装。

我没有找到任何关于 NPM 开发人员采用整个东西的信息,但我认为 npm 包将在某些时候得到修复,nodejs-legacy 将成为真正的遗产。


总结:sudo apt-get install nodejs-legacy
我喜欢能彻底解释情况的答案,而不是仅仅给出盲目执行的命令。然后我可以将该信息复制到我的环境设置脚本中的注释中,这样我就可以知道一年后它不起作用时会发生什么。
作为一个人,我发现 node 不是 node,而是 nodejs,仅在 Debian 上非常不方便。像这样分裂开发工具真的非常非常愚蠢。基本上,这个决定在每个节点包中为 Debian 创造了一个特殊的情况!我从来没有听说过“节点”会做什么,所以我没有任何同情;(
除非我遗漏了什么,否则这不是命名空间冲突。没有命名空间,这是一个简单的名称冲突。命名空间允许您使用相同的名称两次(或更多),只要每个名称都存在于不同的命名空间中。 Linux 或 Unix 中的可执行文件名不存在这样的“空格”。最接近的是,您的 $PATH 变量中可以有多个目录,并且使用最早的具有匹配命名可执行文件的目录。 (但这与命名空间非常不同。)
这很烦人,更是如此,因为名称冲突与 "Amateur Packet Radio" 发生了冲突。
l
leorex

尝试将节点链接到 nodejs。首先找出nodejs在哪里

whereis nodejs

然后将节点软链接到nodejs

ln -s [the path of nodejs] /usr/bin/node 

我假设 /usr/bin 在您的执行路径中。然后你可以通过在命令行中输入 node 或 npm 来进行测试,现在一切都应该工作了。


-s 创建符号链接(通常是首选),而不是硬链接。
这可行,但安装 nodejs-legacy 软件包的 vbo's answer 更容易。
我支持 Don Kirkby 的评论和 vbo 的回答。我认为vbo的答案应该是选择的答案。
我发现只创建一个符号链接而不是两次安装相同的软件要方便得多....
不。 除非您是 dpkg,否则不要与 /usr/bin 混为一谈。正确的解决方案(如果您喜欢这种手动符号链接方法)是/usr/local/bin 中创建符号链接,该符号链接指定用于本地安装和覆盖。您在 /usr/bin 中手动执行的任何操作都可以并且将被包管理器覆盖,和/或会混淆它。
E
Eduardo Dennis

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

指示:

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 版本,您可以键入:

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

完整的教程可以在 here 中找到


这也为我修复了上面的错误。这对 nodejs 开发人员来说要好得多(在我看来,整个开发人员,我不是在 nodejs 工作的人)。我确实用过。
我需要将 nvm 节点软链接到 usr/bin/node。于是跑了sudo ln -s /home/www/.nvm/v0.10.36/bin/node /usr/bin/node
我一直在努力解决这个问题好几个小时。这是我发现的唯一可行的解决方案。谢谢你。
“好处”现在是一个死链接
m
mnille

首先使用以下方式安装 nvm: curl https://raw.githubusercontent.com/creationix/nvm/v0.11.1/install.sh | bash 运行命令 source ~/.profile 现在运行它,这将显示所有已安装或其他版本的软件包: nvm ls-remote 已安装的软件包将显示为绿色。安装您想要的任何版本:nvm install 6.0.0 检查未安装的位置:哪个节点检查当前版本:node -vn=$(which node); n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local


我强烈推荐这个解决方案,以便随时控制节点和 npm 版本以供任何使用。
D
Devs love ZenUML
sudo apt-get --purge remove node
sudo apt-get --purge remove nodejs-legacy
sudo apt-get --purge remove nodejs

sudo apt-get install nodejs-legacy
source ~/.profile

将接受的答案与已折叠的评论中的 source ~/.profile 和之前的一些清理命令结合起来。之后您很可能还需要sudo apt-get install npm


s
shrishinde

对我来说,问题已解决,

sudo apt-get remove node
sudo apt-get remove nodejs
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo ln -s /usr/bin/nodejs /usr/bin/node
alias node=nodejs
rm -r /usr/local/lib/python2.7/dist-packages/localstack/node_modules
npm install -g npm@latest || sudo npm install -g npm@latest

V
Ville

这是我使用的另一种方法,因为我喜欢 n 以便在节点版本之间轻松切换。

在新的 Ubuntu 系统上,首先安装“系统”节点:

curl -sL https://deb.nodesource.com/setup | sudo bash -

然后全局安装 n 模块:

npm install -g n

由于首先安装了系统节点(上图),因此可以使用替代系统来干净地指向 n 提供的节点。首先确保替代系统没有节点:

update-alternatives --remove-all node

然后添加n提供的节点:

update-alternatives --install /usr/bin/node node /usr/local/bin/node 1

接下来添加系统提供的节点(使用 curl 安装的节点):

update-alternatives --install /usr/bin/node node /usr/bin/nodejs 2

现在使用交互式菜单选择 n 提供的节点(从以下命令提供的菜单中选择 /usr/local/bin/node):

update-alternatives --config node

最后,由于 /usr/local/bin 在 PATH 中的优先级通常高于 /usr/bin,因此如果要使替代系统节点有效,则必须创建以下别名(在您的 .bashrc 或 .zshrc 中输入);否则,在 /usr/local/bin 中使用 n 安装的节点始终优先:

alias node='/usr/bin/node'

现在您可以使用 n <desired node version number> 在节点版本之间轻松切换。


S
Suzana

在 Linux Mint 17 上,我尝试了两种解决方案(创建符号链接或使用 nodejs-legacy 包)均未成功。

唯一对我有用的是使用 Chris Lea 的 ppa:

sudo apt-get purge node-*
sudo apt-get autoremove 
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

这安装了节点版本 10.37 和 npm 1.4.28。之后,我可以在全球范围内安装软件包。


x
xdeepakv

正如其他人已经提到的那样,我建议不要使用“sudo apt-get”来安装节点或任何开发库。您可以从 https://nodejs.org/dist/v6.9.2/ 下载所需的版本并设置您自己的环境。

我会推荐像 nvmn 这样的工具来管理您的节点版本。切换和使用这些模块非常方便。 https://github.com/creationix/nvm https://github.com/tj/n

或者编写基本的 bash 来下载 zip/tar,解压移动文件夹并创建软链接。每当您需要更新时,只需将旧软链接指向新下载的版本。就像我为自己创建的一样,您可以参考:https://github.com/deepakshrma/NodeJs-4.0-Reference-Guide/blob/master/nodejs-installer.sh

#Go to home
cd ~
#run command
#New Script
wget https://raw.githubusercontent.com/deepakshrma/NodeJs-4.0-Reference-Guide/master/nodejs-installer.sh 
bash nodejs-installer.sh -v lts
#here -v or --version can be sepecific to 0.10.37 or it could be latest/lts 
#Examples
bash nodejs-installer.sh -v lts
bash nodejs-installer.sh -v latest
bash nodejs-installer.sh -v 4.4.2

K
Krzysztof Karolak

here 的简单解决方案

curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash --
sudo apt-get install nodejs

您可以通过更改 setup_x.x 值来指定版本,例如设置为 setup_5.x


f
frostcs

您的系统无法检测到路径节点 js 二进制文件。

1.哪个节点

2.然后将节点软链接到nodejs

ln -s [the path of nodejs] /usr/bin/node 

我假设 /usr/bin 在您的执行路径中。然后你可以通过在命令行中输入 node 或 npm 来进行测试,现在一切都应该工作了。


d
davide andreazzini

卸载您拥有的任何节点版本

sudo apt-get --purge remove node
sudo apt-get --purge remove nodejs-legacy
sudo apt-get --purge remove nodejs

安装 nvm(节点版本管理器)https://github.com/creationix/nvm

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash

现在您可以安装所需的任何版本的节点并在版本之间切换。


仅供参考 - 任何使用上述方法 nvm 的人,请注意 nodejs-legacy 包是 v0.10.25。 (或者至少,这是我在尝试时看到的。)
J
Juan Antonio Aguilar

我修复了它取消链接 /usr/sbin/node (链接到 ax25-node 包),然后我在命令行上使用它创建了到 nodejs 的链接

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

因为诸如 karma 之类的包不适用于 nodejs 名称,但是将 karma 脚本的第一行从 node 更改为 nodejs,但我更喜欢一劳永逸地解决这个问题


a
aaaidan

对我来说,修复是删除 node* 包和 npm 包。

然后全新安装为:

sudo apt-get install autoclean
sudo apt-get install nodejs-legacy
npm install

sudo apt-get autocleansudo apt-get install autoclean “相同”
V
Vinayk93

问题不在安装程序中用 node 替换 nodejs 或将路径从 /usr/bin/nodejs 更改为 /usr/bin/node


D
Dinesh Jain

这是您的节点没有正确安装,首先您需要卸载节点然后重新安装。要安装节点,这可能会帮助您http://array151.com/blog/nodejs-tutorial-and-set-up/

之后,您可以轻松安装软件包。要安装软件包,这可能会对您有所帮助

http://array151.com/blog/npm-node-package-manager/


ρ
ρяσѕρєя K

您可以在 /usr/bin 中创建一个链接 ln -s nodejs 节点,希望这可以解决您的问题。


P
Pradip Dhakal
node -v  // first check it's install or not
npm -v
sudo apt install npm
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash –
sudo apt-get install nodejs

然后检查

node -v or node –version
npm -v or npm –version

或者您可以删除 package.lock json 文件/node_modules 而不是运行 npm i

我希望它能正常工作

步骤:https://www.geeksforgeeks.org/installation-of-node-js-on-linux/