當前位置: 首頁>>技術教程>>正文


無法在Ubuntu中使用節點包管理器安裝包

, ,

問題描述

由於名稱與另一個包衝突,Ubuntu上的NodeJS解釋器名稱(node)已重命名為nodejs。這是自述文件。 Debian說:

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可以使用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已安裝在係統上,但解釋器名稱有所不同?

最佳解決方法

長話短說:

sudo apt-get install nodejs-legacy

首先讓我澄清一下情況。 2012年夏天,Debian維護者決定重命名Node.js可執行文件,以防止某些命名空間與另一個包發生衝突。這對Debian技術委員會來說是非常困難的決定,因為它打破了向後兼容性。

以下是在Debian mailing list上發布的委員會決議草案的引用:

  1. 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.

  2. 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應該嘗試安裝此軟件包,而不是手動執行符號鏈接。以下是Debian軟件包索引website中此軟件包的鏈接。

它可以使用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在你的執行路徑中。然後你可以通過在你的命令行輸入node或npm來測試,現在一切都應該可行。

第三種解決方法

您還可以使用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

第四種方法

  1. 首先使用以下命令安裝nvm

    curl https://raw.githubusercontent.com/creationix/nvm/v0.11.1/install.sh | bash
    
  2. 運行命令

    source ~/.profile
    
  3. 現在運行此命令將顯示所有已安裝或其他版本的軟件包:

    nvm ls-remote
    
  4. 已安裝的包將為綠色。安裝你想要的任何版本:

    nvm install 6.0.0
    
  5. 檢查未安裝的位置:

    which node
    
  6. 檢查當前版本:

    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

第六種方法

對我來說問題解決了,

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

第七種方法

這是我使用的另一種方法,因為我喜歡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>輕鬆切換節點版本。

第八種方法

在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。之後,我可以在全球範圍內安裝軟件包。

第九種方法

正如其他人已經提到的,我建議不要使用“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

第十種方法

來自here的簡單解決方案

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

您可以通過更改setup_x.x值來指定版本,例如更改為setup_5.x

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/6611.html,未經允許,請勿轉載。