問題

由於名稱與另一個包發生衝突,Ubuntu上的nodejs直譯器名稱(node)已重新命名為nodejs.這是readme的內容.Debian說:

Node.js直譯器命令的上游名稱是“節點”. 在Debian中,直譯器命令被更改為“nodejs”.

這是為了防止名稱空間碰撞:其他命令使用 上游中的相同名稱,例如來自“節點”的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 郵件列表中:

  1. nodejs包應更改為提供/usr/bin / nodejs,而不是/usr/bin / node.包應宣告Breaks:與 Debian中引用/usr/bin/node的任何包.

  2. nodejs source 包還應該在 Projective:extra 中提供一個 nodejs-fromed 二進位制包,其中包含 /usr/bin/node 作為符號連結到 /usr/bin / nodejs.檔案中沒有包可能依賴或推薦 nodejs-leversion包,僅供上游使用
    2001年12月31日終了的兩年期收入和支出及準備金和基金結餘變動報表 相容性。 與節點包的關係。

<...>

第2段是OP問題的實際解決方案. OP應該嘗試安裝此包而不是手動進行符號連結.這是Debian包索引網站中的此包的連結.

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

我沒有找到任何關於NPM開發人員採用整個東西的資訊,但我認為npm包將在某個時候修復,nodejs-legacy成為真正的遺產.

  相同標籤的其他問題

node.jsubuntunpm