首页 文章

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

提问于
浏览
473

由于名称与另一个包冲突,Ubuntu上的NodeJS解释器名称( node )已重命名为 nodejs . 以下是readme.debian所说的内容:

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

但是,使用nodejs会破坏使用 npm 安装软件包 . 程序包安装失败,并显示以下错误:

sh:1:节点:未找到
npm WARN这种失败可能是由于使用了传统的二进制“节点”
npm WARN如需进一步说明,请阅读/usr/share/doc/nodejs/README.Debian

如何使npm了解nodejs已经安装在系统上,但解释器名称是不同的?

17 回答

  • 9

    尝试将节点链接到nodejs . 首先找出nodejs的位置

    whereis nodejs
    

    然后软链接节点到nodejs

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

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

  • 12
    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 之后 .

  • 3

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

    在新的Ubuntu系统上,首先安装'system'节点:

    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> 轻松切换节点版本 .

  • 0

    正如其他人已经提到的,我建议不要使用"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
    
  • 109

    在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 . 之后,我可以在全球范围内安装软件包 .

  • 7

    TL; DR:

    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的任何包的Breaks:关系 . nodejs源包还应在Priority:extra中提供nodejs-legacy二进制包,其中包含/ usr / bin / node作为/ usr / bin / nodejs的符号链接 . 存档中的任何软件包都不依赖于或推荐nodejs-legacy软件包,该软件包仅用于上游兼容性 . 此包声明还应声明与节点包的冲突:关系 . <...>

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

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

    我没有找到关于NPM开发人员采用整个事情的任何信息,但我认为 npm 软件包将在某些方面得到修复并且 nodejs-legacy 成为真正的遗产 .

  • 8

    我修复了unlinking / usr / sbin / node(链接到ax25-node包),然后我在命令行上创建了一个指向nodejs的链接

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

    因为karma之类的包不能与nodejs名一起使用,但是将karma脚本的第一行从node更改为nodejs,但我更喜欢解决这个问题一劳永逸

  • 41

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

  • 1

    对我来说,修复是删除节点*包和npm包 .

    然后全新安装为:

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

    来自here的简单解决方案

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

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

  • 3

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

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

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

  • 1065
    • 首先使用以下命令安装 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
    
  • 0

    您还可以使用 NVM 或Nodejs版本管理器安装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时,可执行文件称为节点 . 您可以通过键入以下内容来查看shell当前使用的版本:

    node -v
    

    可以找到Comeplete教程here

  • 0

    对我来说问题解决了,

    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
    
  • 2

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

  • 4

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

    1.哪个节点

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

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

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

  • 15

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

    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
    

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

相关问题