Ubuntuでノードパッケージマネージャーを使用してパッケージをインストールできない


501

nodeUbuntuのNodeJSインタープリター名()nodejsは、別のパッケージと名前が競合しているために名前が変更されました。readmeは次のとおりです。Debianは言う:

Node.jsインタープリターコマンドのアップストリーム名は「node」です。Debianでは、インタプリタコマンドは「nodejs」に変更されました。

これは、名前空間の衝突を防ぐために行われました。「node」パッケージのax25-nodeなど、他のコマンドは上流で同じ名前を使用します。

Node.jsをシェルコマンドとして呼び出すスクリプトは、代わりに「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

nodejsがすでにシステムにインストールされているが、インタープリター名が異なることをnpmに理解させるにはどうすればよいですか?


29
あなたはに試すことができますln -s nodejs nodeの中で/usr/bin。しかし、それは一種のハックです。
vbo 2014年

1
@vboあなたはそれを答えとして追加できます-それは問題を解決します!
Himel Nag Rana 2014

2
@HimelNagRana私は別の(良い、受け入れられた)答えを持っています。私の最初のコメントも回答に変換されました(stackoverflow.com/a/21168305/539686)。
vbo 2014

4
NVMを使用してNode.jsバージョンgithub.com/creationix/nvmをインストールおよび管理します。これは簡単で便利です。
Unitech、2014

2
私は非常にこのソリューションをお勧めします。stackoverflow.com/a/38325376/3197383を 、いつでも、任意の使用のためのノードとNPMのバージョンのコントロールを取得します。
レミBecheras

回答:


1094

TL; DR:

sudo apt-get install nodejs-legacy

まず、少し状況を明らかにしましょう。2012年夏、Debianのメンテナは、Node.js実行可能ファイルの名前を変更して、別のパッケージとの名前空間の衝突を防止することを決定しました。Debian技術委員会は下位互換性を損なうため、これは非常に難しい決定でした。

以下は、Debian メーリングリストで公開された委員会決議草案からの引用です。

  1. nodejsパッケージは、/ usr / bin / nodeではなく、/ usr / bin / nodejsを提供するように変更する必要があります。パッケージは、Breaks:Debian内の/ usr / bin / nodeを参照するパッケージとの関係を宣言する必要があります。

  2. nodejsソースパッケージは、Priority:extraに、/ usr / bin / nodejsへのシンボリックリンクとして/ usr / bin / nodeを含むnodejs-legacyバイナリパッケージも提供します。アーカイブ内のパッケージは、上流
    互換性のためにのみ提供されるnodejs-legacyパッケージに依存または推奨しない場合があります。このパッケージは、conflicts:ノードパッケージとの関係も宣言します。

<...>

パラグラフ2は、OPの問題の実際の解決策です。OPは手動でシンボリックリンクを作成する代わりに、このパッケージをインストールしようとする必要があります。これは、DebianパッケージインデックスWebサイトにあるこのパッケージへのリンクです。

を使用してインストールできますsudo apt-get install nodejs-legacy

NPM開発者がすべてを採用することについての情報は見つけられませんでしたが、npmパッケージはある時点で修正され、nodejs-legacy本当にレガシーになると思います。


106
要約すると、sudo apt-get install nodejs-legacy
Alf Eaton

58
盲目的に実行するように命令するだけでなく、状況を完全に説明する回答が好きです。次に、その情報を環境設定スクリプトのコメントにコピーして、機能しない場合の1年後の状況を知ることができます。
Mnebuerquo 2014年

29
人として、私はそのノードがノードではなく、代わりにnodejsであることが、Debianでのみであると信じられないほど不便だと思います。このような開発ツールを分割するのは、本当に、本当に、本当に驚くほど愚かです。基本的に、この決定はすべてのNODEJSパッケージでDebianに例外的な状況をもたらしました!「ノード」が他に何をするか聞いたことがないので、同情はありません;(
Lodewijk

4
私が何かを逃していない限り、これは名前空間の衝突ではありませんでした。名前空間はありません。単純な名前の衝突でした。名前空間を使用すると、それぞれが異なる名前空間に存在する限り、同じ名前を2回(またはそれ以上)使用できます。LinuxまたはUnixの実行可能ファイル名には、このような「スペース」はありません。最も近いのは、$ PATH変数に複数のディレクトリを含めることができ、一致する名前付き実行可能ファイルを持つ最も古いディレクトリが使用されることです。(ただし、名前空間とは非常に異なります。)
iconoclast

7
名前の衝突が「アマチュアパケットラジオ」との衝突だったため、これは非常に迷惑です。
スザナ2016

113

ノードをnodejsにリンクしてみてください。まず、nodejsがどこにあるかを見つけます

whereis nodejs

次に、nodejsをnodejsにソフトリンクします

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

/ usr / binが実行パスにあると想定しています。次に、コマンドラインにnodeまたはnpmと入力してテストできます。これで、すべてが機能するはずです。


3
-sは、ハードリンクではなく、シンボリックリンク(多くの場合、推奨される選択)を作成します。
ハイド

20
これは機能しますが、パッケージのインストールに関するvboの答えnodejs-legacyはより簡単です。
Don Kirkby、

2
私はドン・カークビーのコメントとvboの答えを2番目にしています。私はvboの答えが選択された答えであるべきだと思います。
modulitos 2014年

3
同じソフトウェアを2回インストールするよりもシンボリックリンクを作成する方がはるかに便利だと思います....
フランキー

7
いいえ/usr/binあなたがいない限り、からかわないでくださいdpkg。適切な解決策(この手動のシンボリックリンクの/usr/local/binアプローチが好きな場合)は、ローカルインストールとオーバーライド用に指定されたシンボリックリンク作成することです。手動で/usr/bin行うことはすべて、パッケージマネージャーによって上書きされたり、混乱したりする可能性があります。
tripleee 2015

44

NVMまたはNodejsバージョンマネージャを使用してNodejsをインストールすることもできます。バージョンマネージャを使用することには多くの利点があります。それらの1つは、この問題について心配する必要がないということです。


手順:


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をインストールする場合、実行可能ファイルはnodeと呼ばれます。次のように入力すると、シェルで現在使用されているバージョンを確認できます。

node -v

完全なチュートリアルはここにあります


3
これにより、上記のエラーも修正されました。nodejs開発者にとってははるかに優れています(私の見解では、開発者全体として、私はnodejsで作業する人ではありません)。私はそれを使いました。
Ajeeb.KP 2015年

1
nvmノードをにソフトリンクする必要がありましたusr/bin/node。走ったsudo ln -s /home/www/.nvm/v0.10.36/bin/node /usr/bin/node
ジェイソン・キム

2
私は何時間もこれを理解しようと努力してきました。これは私が機能することがわかった唯一のソリューションです。ありがとうございました。
w3bMak3r 2015年

「メリット」は今死んリンクです
遠足

20
  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

2
いつでも、どのような用途でも、ノードとnpmのバージョンを制御するには、このソリューションを強くお勧めします。
レミBecheras

14
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後にする必要があります。


12

私にとって問題は解決されました、

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

10

ここでは、ノードのバージョンを簡単に切り替えるためにnが好きなので、私が使用する別のアプローチを紹介します。

新しいUbuntuシステムで、最初に「システム」ノードをインストールします。

curl -sL https://deb.nodesource.com/setup | sudo bash -

次に、nモジュールをグローバルにインストールします。

npm install -g n

システムノードが最初にインストールされたので(上記)、alternativesシステムを使用して、nによって提供されるノードを明確に指すことができます。最初に、Alternativesシステムがノードに何も持たないことを確認します。

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よりもPATHの方が優先順位が高い/usr/binため、代替システムノードを有効にするには、次のエイリアスを作成する(.bashrcまたは.zshrcに入力する)必要があります。そうでない場合は、/ usr / local / binにnをインストールしたノードが常に優先されます。

alias node='/usr/bin/node'

これで、ノードのバージョンを簡単に切り替えることができますn <desired node version number>


9

Linux Mint 17では、両方の解決策(シンボリックリンクの作成またはnodejs-legacyパッケージの使用)を試しましたが、成功しませんでした。

最後に私のために働いた唯一のことは、クリス・リーからの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がインストールされました。その後、パッケージをグローバルにインストールできます。


9

他の人々がすでに述べているように、ノードや開発ライブラリのインストールには「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

6

ここから簡単な解決策

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

バージョンを指定するには、setup_x.xの値を、たとえばsetup_5.xに変更します。


5

システムはパスノードjsバイナリを検出できません。

1.どのノード

2.次に、nodejsからnodejsへのソフトリンク

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

/ usr / binが実行パスにあると想定しています。次に、コマンドラインにnodeまたはnpmと入力してテストできます。これで、すべてが機能するはずです。


4

持っているノードのバージョンをすべてアンインストールします

sudo apt-get --purge remove node
sudo apt-get --purge remove nodejs-legacy
sudo apt-get --purge remove nodejs

nvm(Node Version Manager)をインストールしますhttps://github.com/creationix/nvm

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash

これで、必要なノードのバージョンをインストールして、バージョンを切り替えることができます。


参考までに-上記の方法を使用してnvmいる人は、nodejs-legacyパッケージがv0.10.25であることに注意してください。(または、少なくとも、私が試してみたところそれが
わかりました

2

/ usr / sbin / node(ax25-nodeパッケージにリンクされています)のリンクを解除するように修正し、コマンドラインでこれを使用してnodejsへのリンクを作成しました

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

karmaなどのパッケージはnodejs名では機能しないため、karmaスクリプトの最初の行をnodeからnodejsに変更しますが、この問題を一度に解決することをお勧めします


1

私にとっての修正は、node *パッケージとnpmパッケージを削除することでした。

次に、次のように新規インストールします。

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

sudo apt-get autocleanない「同じ」よりsudo apt-get install autoclean
m3nda

1

インストーラーに問題はありません
。nodejsをnodeに置き換えるか、パスを/ usr / bin / nodejsから/ usr / bin / nodeに変更してください


1

これは、ノードが正しくインストールされていないため、最初にノードをアンインストールしてから、再度インストールする必要があります。ノードをインストールするには、http://array151.com/blog/nodejs-tutorial-and-set-up/が役立ちます。

その後、パッケージを簡単にインストールできます。パッケージをインストールするには、これが役立ちます

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.