web-dev-qa-db-ja.com

ルート(またはSudo)からNVMを使用できません

Sudoから実行する場合、アプリケーションが異なるバージョンのNodeJSを使用することを述べました。

$ 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

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

85

以下のコマンドのリスト(ソース: 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に存在する必要があります)にコピーし、許可を設定するだけですすべてのユーザーがそれらにアクセスできます。

お役に立てれば!

173
Venkat Selvan

私の解決策は、/usr/local/binに使用しているnodeおよびnpmのバージョンからシンボリックリンクを作成することです。

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"

これにより、npmおよびnodeがすべてのユーザーに利用可能になります。

99
SimpleJ

あなたの問題は、nvmを使用するときにSudoがパスにないことです。

タイプ

$ which nvm

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

/home/abc/mynvm/nvm

Sudoで今すぐ再試行してください:

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

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

13
CFrei

基本的な理由は、nvmが実際のプログラムではないためです。これは、ユーザーの.profile.bashrc、または...にロードされるbash関数です。そのため、Sudoは、他のほとんどのプログラムのように$ PATHから自動的に選択しません。

代替ノードバージョンマネージャーはnhttps://github.com/tj/n です。これは実際のプログラムなので、Sudoはハッキングなしで$ PATHを介して取得します(Sudoが$ PATHに/usr/local/binを持っている限り)。

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
8
wisbucky

あなたにも問題がありました。最後に、私はそれを回避しました。私の解決策は次のとおりです。

  1. Nvmとnodejsをアンインストールします。役立つリンクを次に示します。 nvmのアンインストール 。 apt-getを使用してnodejsをインストールした場合は、apt-get purge nodejsコマンドでアンインストールできます。
  2. グローバルnvmをインストールします。このページを参照してください: nvm global 。 「標準のnvmには、マルチユーザー環境またはルート環境での作業が困難であることが知られています。」

ターミナルを再起動した後、コマンドSudo nvm lsを実行できます。

6
Qianyue

README による

Nvmを使用する場合、npm -gを使用してモジュールをグローバルにインストールするためにSudoは必要ないため、Sudo npm install -g gruntを実行する代わりにnpm install -g gruntを実行してください

Sudo npmが必要ですか?

私の場合、Sudo npm run startが必要です。これは、rootアクセスを必要とするファイルへのアクセスを必要とします。 この問題 によると、

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

合計で

NvmのメンテナーはSudo:Pをする必要はないと強く信じています

5
lzl124631x
$ Sudo bash -ic "nvm use stable; npm -v"
Now using node v6.3.1 (npm v3.10.3)
3.10.3
5
pmontrasio

私も同じマシンでnvmを試してみましたが、わずかに異なる応答があります:

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

私の推測では、nvmの外部にノード0.11をインストールしたと思われます。 (パッケージマネージャーまたはソースから

したがって、Sudoを介して実行中のノードは、代わりにこのスタンドアロンノードを選択します。

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

4

これに対する最も簡単な解決策は、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をヒットできます

0
itchyspacesuit

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

0
Ricky