1. ホーム
  2. node.js

[解決済み] Ubuntuでnodeパッケージマネージャを使用してパッケージをインストールすることができない

2022-03-19 23:40:13

質問

NodeJSインタプリタ名( node ) に変更されました。 nodejs 他のパッケージと名前の衝突があったため。以下はreadmeの内容です。Debianにはこうあります。

Node.jsのインタプリタコマンドは、上流では"node"と呼ばれています。 Debian では、インタプリタコマンドは "nodejs" に変更されました。

これは、名前空間の衝突を防ぐために行われました。 のax25-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に理解させるにはどうすればよいですか?

解決方法は?

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 ソースパッケージは、/usr/bin/node を含む nodejs-legacy バイナリパッケージも Priority: extra で提供しなければなりません。 /usr/bin/nodejs. アーカイブ内のパッケージは、以下のものに依存または推奨してはいけません。 nodejs-legacy パッケージは、上流工程のためにのみ提供されています。
    互換性があります。 このパッケージは、Conflicts.Conflict を宣言するものとします。 の関係も宣言する。

<...>

2項が、OPさんの問題に対する実際の解決策です。シンボリックリンクを手動で行う代わりに、このパッケージをインストールすることをお勧めします。Debian パッケージインデックスにあるこのパッケージへのリンクは以下のとおりです。 ウェブサイト .

を使用してインストールすることができます。 sudo apt-get install nodejs-legacy .

NPM開発者による全面採用の情報は見つかりませんでしたが、私が思うに npm パッケージはどこかの時点で修正され nodejs-legacy は本当にレガシーになってしまう。