Cannot install packages using node package manager in Ubuntu
Ubuntu上的nodejs解释器名称(
The upstream name for the Node.js interpreter command is"node".
In Debian the interpreter command has been changed to"nodejs".This was done to prevent a namespace collision: other commands use
the same name in their upstream, such as ax25-node from the"node"
package.Scripts calling Node.js as a shell command must be changed to instead
use the"nodejs" command.
但是,使用nodejs会破坏使用
1
2
3 sh: 1: node: not found
npm WARN This failure might be due to the use of legacy binary"node"
npm WARN For further explanations, please read /usr/share/doc/nodejs/README.Debian
如何让NPM理解nodejs已经安装在系统上,但解释器名称不同?
DR:
1 | sudo apt-get install nodejs-legacy |
首先,让我澄清一下情况。2012年夏天,Debian维护人员决定重命名node.js可执行文件,以防止与另一个包发生某种名称空间冲突。对于Debian技术委员会来说,这是一个非常困难的决定,因为它破坏了向后兼容性。
以下是委员会决议草案的引用,发表在Debian邮件列表中:
The nodejs package shall be changed to provide /usr/bin/nodejs, not /usr/bin/node. The package should declare a Breaks: relationship with
any packages in Debian that reference /usr/bin/node.The nodejs source package shall also provide a nodejs-legacy binary package at Priority: extra that contains /usr/bin/node as a symlink to
/usr/bin/nodejs. No package in the archive may depend on or recommend
the nodejs-legacy package, which is provided solely for upstream
compatibility. This package declares shall also declare a Conflicts:
relationship with the node package.<...>
第2段是OP问题的实际解决方案。OP应该尝试安装这个包,而不是手动执行symlink。在Debian Package Index网站上有一个指向这个包的链接。
可以使用
我没有发现任何关于NPM开发人员采用这一整体的信息,但我认为
尝试将节点链接到nodejs。首先找出nodejs在哪里
1 | whereis nodejs |
然后软链接节点到节点
1 | ln -s [the path of nodejs] /usr/bin/node |
我假设/usr/bin在您的执行路径中。然后您可以通过在命令行中键入node或npm进行测试,现在一切都可以工作了。
您也可以使用nvm或nodejs版本管理器安装nodejs。使用版本管理器有很多好处。其中之一就是你不必担心这个问题。
说明:1 2 | sudo apt-get update sudo apt-get install build-essential libssl-dev |
一旦安装了必备软件包,就可以从项目的Github页面中下拉NVM安装脚本。版本号可能不同,但一般来说,您可以使用以下语法下载并安装它:
1 | curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | sh |
这将下载脚本并运行它。它将把软件安装到您在
要访问NVM功能,您需要注销并重新登录,或者您可以源~/.profile文件,以便当前会话了解更改:
1 | source ~/.profile |
现在已经安装了NVM,您可以安装独立的node.js版本。
要查找可用于安装的node.js版本,可以键入:
1 2 3 4 5 6 7 8 | nvm ls-remote . . . v0.11.10 v0.11.11 v0.11.12 v0.11.13 v0.11.14 |
如您所见,本文撰写时的最新版本是v0.11.14。您可以通过键入以下内容来安装:
1 | nvm install 0.11.14 |
通常,NVM会切换到使用最新安装的版本。您可以通过键入以下内容明确告诉NVM使用我们刚下载的版本:
1 | nvm use 0.11.14 |
使用nvm安装node.js时,可执行文件称为node。您可以通过键入以下内容来查看shell当前使用的版本:
1 | node -v |
Comeplete教程可以在这里找到
先安装
1 | curl https://raw.githubusercontent.com/creationix/nvm/v0.11.1/install.sh | bash |
运行命令
1 | source ~/.profile |
现在运行此程序,将显示所有已安装或其他版本的软件包:
1 | nvm ls-remote |
安装的软件包将为绿色。安装您想要的任何版本:
1 | nvm install 6.0.0 |
检查未安装的位置:
1 | which node |
检查当前版本:
1 2 3 4 5 6 | node -v n=$(which node); n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local |
1 2 3 4 5 6 | 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 |
结合已被折叠的评论中的
对我来说,问题是通过
1 2 3 4 5 6 7 8 | 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 |
这是我使用的另一种方法,因为我喜欢在节点版本之间轻松切换。
在新的Ubuntu系统上,首先安装"system"节点:
1 | curl -sL https://deb.nodesource.com/setup | sudo bash - |
然后全局安装n个模块:
1 | npm install -g n |
由于系统节点是首先安装的(如上),所以可以使用备选系统干净地指向n提供的节点。首先确保备选系统没有节点:
1 | update-alternatives --remove-all node |
然后添加n提供的节点:
1 | update-alternatives --install /usr/bin/node node /usr/local/bin/node 1 |
下一个添加系统提供的节点(安装了curl的节点):
1 | update-alternatives --install /usr/bin/node node /usr/bin/nodejs 2 |
现在,使用交互菜单选择n提供的节点(从以下命令显示的菜单中选择
1 | update-alternatives --config node |
最后,由于
1 | alias node='/usr/bin/node' |
现在,您可以轻松地在使用
在LinuxMint17上,我尝试了两种解决方案(创建一个symlink或使用
唯一对我起作用的是使用Chris Lea的PPA:
1 2 3 4 5 | 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。之后,我可以在全球安装软件包。
正如其他人已经提到的,我建议不要使用"sudo-apt-get"来安装节点或任何开发库。您可以从https://nodejs.org/dist/v6.9.2/下载所需版本,并设置您自己的环境。
我将推荐NVM和N等工具来管理您的节点版本。切换和使用这些模块非常方便。https://github.com/creationix/nvm网址:https://github.com/tj/n
或者编写基本的bash来下载zip/tar,提取move文件夹并创建一个软链接。每当需要更新时,只需将旧的软链接指向新下载的版本。就像我为自己创造的一样,你可以参考:https://github.com/deepakshrma/nodejs-4.0-reference-guide/blob/master/nodejs-installer.sh
1 2 3 4 5 6 7 8 9 10 11 | #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 |
这里的简单解决方案
1 2 | curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -- sudo apt-get install nodejs |
您可以通过更改Setup_x.x值来指定版本,例如将其设置为Setup_5.x
系统无法检测路径节点JS二进制文件。
1.哪个节点
2.然后软链接节点到节点
1 | ln -s [the path of nodejs] /usr/bin/node |
我假设/usr/bin在您的执行路径中。然后您可以通过在命令行中键入node或npm进行测试,现在一切都可以工作了。
卸载您拥有的任何节点版本
1 2 3 | 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
1 | wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash |
现在,您可以安装所需节点的任何版本,并在这些版本之间进行切换。
我修复了它取消链接/usr/sbin/node(它链接到ax25节点包),然后我在命令行上创建了一个到nodejs的链接。
1 | sudo ln -s /usr/bin/nodejs /usr/bin/node |
因为像karma这样的包不适用于nodejs名称,但是将karma脚本的第一行从nodejs改为nodejs,但是我更愿意一次性解决这个问题。
对我来说,修复是删除node*包和npm包。
然后重新安装如下:
1 2 3 | sudo apt-get install autoclean sudo apt-get install nodejs-legacy npm install |
安装程序中没有问题将nodejs替换为node或将路径从/usr/bin/nodejs更改为/usr/bin/node
这是您的节点没有正确安装,首先需要卸载该节点,然后重新安装。要安装节点,这可能有助于http://array151.com/blog/nodejs-tutorial-and-set-up/
之后,您可以轻松地安装软件包。要安装软件包,这可能有助于您
http://array151.com/blog/npm-node-package-manager/
可以在