在Ubuntu中不能使用节点包pipe理器来安装软件包
Ubuntu上的nodejs
解释器名称( node
)由于与其他软件包的名称冲突而被重命名为nodejs
。 这是readme.debian所说的:
Node.js解释器命令的上游名称是“node”。 在Debian中,解释器命令已经改为“nodejs”。
这样做是为了防止命名空间冲突:其他命令在其上游使用相同的名称,例如“node”包中的ax25-node。
调用Node.js作为shell命令的脚本必须改为使用“nodejs”命令。
但是,使用nodejs使用npm
来清理安装包。 程序包安装失败,出现以下错误:
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已经安装在系统上,但是解释器的名字是不一样的?
TL; DR:
sudo apt-get install nodejs-legacy
首先让我澄清一下情况。 在2012年夏天,Debian维护者决定重命名Node.js可执行文件以防止某种名称空间与另一个软件包发生冲突。 对于Debian技术委员会来说这是非常艰难的决定,因为它打破了向后兼容性。
以下是Debian 邮件列表中发布的委员会决议草案的一句话:
应将nodejs软件包更改为提供/ usr / bin / nodejs,而不是/ usr / bin / node。 该软件包应该声明与Debian中引用/ usr / bin / node的任何软件包的Breaks:关系。
nodejs源码包还应提供一个包含/ usr / bin / node的Priority:extra作为/ usr / bin / nodejs的符号链接的nodejs-legacy二进制包。 档案中没有包可以依赖或推荐专为上行提供的nodejs-legacy包
兼容性。 这个包声明也应该声明与节点包的冲突:关系。<…>
第2款是OP问题的实际解决scheme。 OP应该尝试安装这个软件包,而不是手动执行符号链接。 这里是Debian软件包索引网站的这个软件包的链接。
它可以使用sudo apt-get install nodejs-legacy
。
我还没有发现关于NPM开发者采用整个事情的任何信息,但是我认为npm
包将被固定在某个点上,并且nodejs-legacy
变成了真正的遗产。
尝试将节点链接到nodejs。 首先找出nodejs在哪里
whereis nodejs
然后软链接节点到nodejs
ln -s [the path of nodejs] /usr/bin/node
我假设/ usr / bin在你的执行path。 然后你可以在你的命令行里inputnode或者npm进行testing,现在一切都可以正常工作。
您也可以使用NVM或Nodejs版本pipe理器来安装Nodejs使用版本pipe理器有很多好处 。 其中之一是你不必担心这个问题。
说明:
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
文件中以使用该文件。
要访问nvmfunction,您需要注销并重新login,或者可以获取〜/ .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。 你可以通过input以下命令来安装
nvm install 0.11.14
通常,nvm将切换到使用最近安装的版本。 您可以通过键入以下命令来明确告诉nvm使用我们刚刚下载的版本:
nvm use 0.11.14
当您使用nvm安装Node.js时,可执行文件被称为节点。 您可以通过键入以下命令来查看shell正在使用的版本:
node -v
这个补充教程可以在这里find
-
首先安装
nvm
使用:curl https://raw.githubusercontent.com/creationix/nvm/v0.11.1/install.sh | bash
-
运行命令
source ~/.profile
-
现在运行这个,这将显示将所有安装或其他版本的软件包:
nvm ls-remote
-
安装的软件包将是绿色的。 安装你想要的任何版本:
nvm install 6.0.0
-
检查未安装的位置:
which node
-
检查当前版本:
node -v n=$(which node); n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local
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
之后。
这是我使用的另一种方法,因为我喜欢在节点版本之间轻松切换。
在新的Ubuntu系统上,首先安装'system'节点:
curl -sL https://deb.nodesource.com/setup | sudo bash -
然后在全局安装n模块:
npm install -gn
由于系统节点是首先安装的(上图),所以备选系统可以用来干净地指向由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
现在使用交互式菜单select由n提供的/usr/local/bin/node
从以下命令提供的菜单中select/usr/local/bin/node
):
update-alternatives --config node
最后,由于/usr/local/bin
通常在PATH中比在/usr/bin
具有更高的优先级,因此如果替代系统节点有效,则必须创build以下别名(input到.bashrc或.zshrc中) 否则在/ usr / local / bin中安装n的节点始终优先:
alias node='/usr/bin/node'
现在,您可以轻松地在n <desired node version number>
之间切换节点版本。
在Linux Mint 17上,我尝试了两种解决scheme(创build符号链接或使用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。 之后,我可以在全球安装软件包。
正如其他人已经提到,我会build议不要使用“sudo apt-get”来安装节点或任何开发库。 您可以从https://nodejs.org/dist/v6.9.2/下载所需的版本,并设置您自己的环境。;
我会推荐像nvm和n这样的工具来pipe理你的节点版本。 切换和使用这些模块非常方便。 https://github.com/creationix/nvm https://github.com/tj/n
或者写下基本的bash来下载zip / tar,提取移动文件夹并创build一个软链接。 无论何时需要更新,只需将旧的软链接指向新下载的版本即可。 就像我为自己创build的,你可以参考: 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
对于我来说问题解决了,
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
这里简单的解决scheme
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -- sudo apt-get install nodejs
您可以通过更改setup_x.x值来指定版本,例如setup_5.x
对我来说,修复是删除节点*包和npm包。
然后重新安装为:
sudo apt-get install autoclean sudo apt-get install nodejs-legacy npm install
我解决了它的链接/ usr / sbin /节点(这是链接到ax25节点包),然后我已经创build一个链接到nodejs使用这个命令行
sudo ln -s /usr/bin/nodejs /usr/bin/node
因为像karma这样的包不能和nodejs的名字一起工作,但是把第一行的karma脚本从节点改成nodejs,但是我宁愿一劳永逸地解决这个问题
卸载你拥有的任何节点版本
sudo apt-get --purge remove node sudo apt-get --purge remove nodejs-legacy sudo apt-get --purge remove nodejs
安装nvm(节点版本pipe理器) https://github.com/creationix/nvm
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash
现在你可以安装你想要的任何版本的节点,并在版本之间切换。
您的系统不能检测到path节点js二进制文件。
那个节点
2.然后到nodejs的软链接节点
ln -s [the path of nodejs] /usr/bin/node
我假设/ usr / bin在你的执行path。 然后你可以在你的命令行里inputnode或者npm进行testing,现在一切都可以正常工作。
你可以在/usr/bin
创build一个链接ln -s nodejs
节点,希望能解决你的问题。
问题不在安装程序中
用节点replacenodejs或将path从/ usr / bin / nodejs更改为/ usr / bin / node
您可以通过以下步骤在您的Ubuntu Os中安装nodejs
sudo apt-get update sudo apt-get install nodejs sudo apt-get install build-essential
这是您的节点没有正确安装,首先您需要卸载节点,然后再次安装。 要安装节点,这可能会帮助你http://array151.com/blog/nodejs-tutorial-and-set-up/
之后,您可以轻松地安装软件包。 要安装软件包,这可能会帮助你