ルート(またはsudo)からNVMを使用できない


104

アプリケーションでから実行するときに、異なるバージョンのNodeJSを使用することを述べましたsudo

$ node -v
v0.10.23
$ sudo node -v
v0.11.8-pre

このv0.11.8-preはいくつかの問題を引き起こしたので、絶対に使用したくありませんが、rootに変更することはできません。

$ sudo nvm use v0.10.23
sudo: nvm: command not found

rootユーザーからnvmをインストールしようとしましたが、「NVMはすでにインストールされています」というエラーが表示されましたが、から実行しsudoたときにnvmが見つかりません。私の問題は何ですか?


3
試してみてくださいsudo -s その後、インストールnvm
Games Brainiac 2014年

@GamesBrainiac申し訳ありませんが、ルートからインストールしようとしたと書きました
Vitalii Korsakov 14年

/root/.nvm/を削除し、nvmを最初から再インストールしてみてください
Antonio E.

/root/.nvmはありません。私はsudoからnvmをインストールし、それを通常のユーザーのホームディレクトリにインストールしました
Vitalii Korsakov

4
あなたがgithub.com/xtuple/nvm
松尾

回答:


219

以下のコマンドのリスト(ソース:digitalocean)は問題を解決するようです

n=$(which node); \
n=${n%/bin/node}; \
chmod -R 755 $n/bin/*; \
sudo cp -r $n/{bin,lib,share} /usr/local

上記のコマンドは少し複雑ですが、nvmを介してアクティブなノードのバージョンをコピーするだけです。 /usr/local/ディレクトリ(ユーザーがインストールしたグローバルファイルがLinux VPSに存在する必要があります)にすべてのユーザーがアクセスできるように権限を設定するだけです。 。

お役に立てれば!


7
ありがとう、それは私を助けました。
Vishal Kumar Verma

7
ありがとうございました!これにより多くの時間を節約できました
クイントンパイク

4
パーフェクト!どうもありがとうございます。
Jean-Baptiste Louazel 2016

2
驚くばかり!昨夜、npmのアクセス許可をあちこちに必死に変更してRasPi 3システム全体を台無しにしました。今日、私は3時間かけて、npmを呼び出すたびにsudoを必要とせずにnode / npmをグローバルにインストールするための最良のソリューションを探しました。あなたのソリューションは、この記事でうまくいったlosant.com/blog/how-to-install-nodejs-on-raspberry-pi
ボッシュ

3
この偉大なオプションのような音が、私はこれらのエラーを得続ける:chmod: cannot operate on dangling symlink ‘/home/ec2-user/.nvm/versions/node/v7.1.0/bin/node-debug’ chmod: cannot operate on dangling symlink ‘/home/ec2-user/.nvm/versions/node/v7.1.0/bin/node-inspector’
trex005

129

私のソリューションは、のバージョンからシンボリックリンクを作成することであるnodenpm私はに使用しています/usr/local/bin

sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/node" "/usr/local/bin/node"
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npm" "/usr/local/bin/npm"

これによりnpmnodeすべてのユーザーが利用できるようになります。


1
素晴らしいソリューション。2行目の最後に「」を追加するだけです(何らかの理由で自分で編集できませんでした)
Rayee Roded

1
すばらしい、これは断然最高のソリューションです。このようにして、rootは常に、nvmユーザーで使用しているのと同じnpm /ノードバージョンを使用します。
luiscvalmeida 2017

3
素晴らしい解決策ですが、使用しているノードのバージョンを変更した場合は、上記のコマンドを再実行する必要があります。
door_number_three

4
よく使うnpx。それで私もそれを追加しました:sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npx" "/usr/local/bin/npx"
トーマス

あなたが同じことをするだろうか@SimpleJbabel-node
user566245

14

あなたの問題は、nvmあなたが使用するときにパスに含まれていないことですsudo

だからタイプ

$ which nvm

結果は次のようになります

/home/abc/mynvm/nvm

今すぐ再試行してくださいsudo

sudo /home/abc/mynvm/nvm use v0.10.23

rootユーザーが0.10.13-バージョンを見つけられないという問題に遭遇したと思いますが、次のエラーメッセージを表示できます...


42
which nvm何も出力しない
Vitalii Korsakov 2014

6
ルートにも何も出力しません
Vitalii Korsakov 2014

3
問題は、rootとしてログインしないことです。どして私がこんな事に?ルートアクセスが必要な場合は、常に使用しますsudo。はい、ルートとしてログインしてnvmをインストールできますが、将来は実行できませんsudo nvm use v0.10.25。そのためsudo node、ユーザーからも使用できませんでした。
Vitalii Korsakov 2014

2
which nvmうまくいきませんか?nvmは実行可能ファイルではなく、シェル関数です。github.com/creationix/nvm/issues/540
Matt

2
最近、which nvmここで同様の質問をしました:stackoverflow.com/questions/49156104/…を使用type nvmして、その定義を明らかにします。マットが言ったように、それはシェル関数です。
Martin Braun

13

根本的な理由は、nvmが実際のプログラムではないためです。これは、ユーザーの中にロードされるbashの機能だ.profile.bashrcまたは...だからはsudo自動的に他のほとんどのプログラムのように$のPATHからそれを拾うていません。

代替のノードバージョンマネージャーは、httpsn//github.com/tj/nです。それは実際のプログラムであるので、sudo(限り、任意のハックなしの$ PATH経由でそれを拾うだろうsudo持っ/usr/local/binて$ PATHに)。

sudo npm install -g n  # install 'n' globally
which n                # should be /usr/local/bin/n

sudo n lts             # need sudo to switch node versions
node --version         # v6.10.0
sudo node --version    # v6.10.0

完璧です。「nvmは問題ではありませんが、bash関数です」に感謝します:)
別の

はは、「プログラム」の代わりに私のスペルミスの「問題」について気づいたところです;)。
他の

7

READMEによると

nvmを使用する場合sudo、でモジュールをグローバルにインストールする必要はありませんnpm -g。そのため、代わりにsudo npm install -g gruntnpm install -g grunt

sudo npmが必要ですか?

私の場合、sudo npm run startルートアクセスを必要とするファイルへのアクセスが必要です。この問題によると、

使用しませんsudo。代わりに、ファイルをchmod / chownして、nvmを持つユーザーがファイルにアクセスできるようにする必要があります。

要するに

nvmのメンテナーは、私たちがする必要はないと強く信じていますsudo:P


6

私もあなたの問題を抱えていました。最後に私はそれを回避しました。これが私の解決策です:

  1. nvmとnodejsをアンインストールします。ここにいくつかの役立つリンクがあります:nvmのアンインストール。apt-getを使用してnodejsをインストールした場合は、次のコマンドでアンインストールできます。apt-get purge nodejs
  2. グローバルnvmをインストールします。このページを参照してください:nvmグローバル。それが言うように、「標準のnvmは、マルチユーザーまたはroot化された環境で動作する既知の問題を抱えています。」

端末を再起動した後、コマンドを実行できますsudo nvm ls


1
このブランチは12コミット先にあり、1123コミットはcreationix:masterの後ろにあります。nvmのxtupleリポジトリから直接取得
MrMesees

6
$ sudo bash -ic "nvm use stable; npm -v"
Now using node v6.3.1 (npm v3.10.3)
3.10.3

4

私は自分のマシンでも同じことを試しましたnvmが、少し違う反応があります:

$ sudo node --version                                                                                                                                                                    
sudo: node: command not found

私の推測では、nvmの外部にノード0.11がインストールされています。(パッケージマネージャー経由またはソースから

したがって、sudoを介してノードを実行すると、代わりにこのスタンドアロンノードが取得されます。

それは理にかなっていますか、それとも私は間違っていますか?


はい、そうです。nodenvmをインストールしました。しかし、すべてが通常のユーザーには問題なく機能し、ルートには機能しません。
Vitalii Korsakov 2014

1
ああ大丈夫。次に、nvmはrootとして実行されることを意図していないと思います。実際、ユーザーランドでの実行は必要な機能であると私は思っています。しかし、これはあなたを助けるかもしれない:github.com/creationix/nvm/issues/5
オーレリアンThieriot

この男は明らかにsudoモードで実行する特別なnvmを作成しました:github.com/xtuple/nvm。残念ながらsudoモードでのみ。それが許容できるかどうかはわかりません
オーレリアンティエリオット2014年

0

nvmをグローバルにインストールする
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | sudo bash


creationixはnvmを作成しています。このサードパーティのnvmについては特に注意します...
MrMesees

4
このブランチは12コミット先にあり、1123コミットはcreationix:masterの後ろにあります。これは問題です。リンクを削除してください
MrMesees

8
この答えは私の目を出血させます。あなただけではないはずです、何かをダウンロードしてはsudo bashでそれを実行WTF
CharlyDelta

実際、最近のwgetコマンドはで終わり、| bashsudoはどこにもありません:nvm-sh / nvm:Node Version Manager
Elise van Looij

0

これに対する最も簡単な解決策は、どこにいてもnvm.sh実行可能ファイルをヒットすることです。

sudo /home/ubuntu/.nvm/nvm.sh install node

これは私にとってはうまくいきます(それがインストールパスであると仮定します)。

完全なインストール手順は次のようになります

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
export NVM_DIR="/home/ubuntu/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

次に、上記のコマンドを実行して、新しくインストールされたnvm.shにアクセスします。

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