2014-01-19 23 views
53

sudoから実行すると、私のアプリケーションで異なるバージョンのNodeJSが使用されていると言いました。NVMをroot(またはsudo)から使用できない

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

このv0.11.8-事前は私にいくつかの問題を引き起こしたので、私は間違いなくそれを使用したくないが、私はルートのためにそれを変更することはできません。

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

私は、rootユーザーからのNVMをインストールしようとしましたが、エラー「NVM既にインストール」を得たが、sudoから実行するときに、まだ見つからないNVMてきました。私の問題は何ですか?

+0

'sudo -s' _then_ install' nvm'を試してください。 –

+0

@GamesBrainiac申し訳ありませんが、私はrootからインストールしようとしたと書いています –

+0

/root/.nvm/を削除し、最初からnvmを再インストールしようとしました –

答えて

5

私もnvmを持っていると私はslighlty異なる応答を持っているところ、私は私のマシン上で同じことを試してみました:

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

私の推測では、あなたがNVMの外のノード0.11をインストールしていることです。 (パッケージマネージャ経由、さらにはソース

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

これは意味があるのですか、間違っていますか?

+0

はい、そうです。 * node *をインストールしてから* nvm *をインストールしました。しかし、すべて正常なユーザーのために正常に動作し、ルートのために動作しません。 –

+1

ああ大丈夫です。次に、nvmはrootとして実行されることを意図していないと思います。実際、私はユーザの土地で走っていることが望ましい機能であることは確かです。しかし、これはあなたを助けるかもしれません:https://github.com/creationix/nvm/issues/5 –

+0

またはこれ:https://github.com/creationix/nvm/issues/43 –

13

sudoを使用すると、nvmはパスに含まれません。

ので

$ which nvm 

を入力して、結果が

/home/abc/mynvm/nvm 

のようなものsudoで今もう一度試してみてくださいになります:私はあなたがしていることを問題が発生したと仮定し

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

rootユーザは0.10.13バージョンを見つけることができませんが、次のエラーメッセージを見ることができます...

+23

'nvm'は何も出力しません –

+0

' 'nvm'をルートとして試してから、' sudo /nvm use v0.10.23'を実行してください。今、何が起きた? (ちなみに、これはノードやプログラミング言語の問題ではありませんが、Linuxマシンの設定では...) – CFrei

+4

rootには何も出力されません –

4

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

  1. nvmとnodejsをアンインストールします。役に立つリンクがあります:Uninstallation of nvm。 apt-getを使用してnodejをインストールした場合は、コマンドapt-get purge nodejsでアンインストールできます。
  2. グローバルnvmをインストールします。このページを参照してください:nvm global。 「標準のnvmは、マルチユーザー環境やルート環境では問題があることがわかっています。

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

+1

このブランチは12コミットで、1123はcreationix:masterの1123コミットです。 nvmのためのxtupleのレポからまっすぐ取られた – MrMesees

0


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

+0

これはうまくいきます:) – Futur

+0

creationix authors nvm 、私はこのサードパーティ製のnvmを非常に注意しています。 – MrMesees

+3

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

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

私のソリューションでグローバルにNVMをインストールすることは/usr/local/binに私が使用しているnodenpmのバージョンからシンボリックリンクを作成することです:

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をすべてのユーザーが利用できます。

+1

素晴らしい解決策です。 (これは何らかの理由で自分自身を編集できませんでした) – RLaaa

+1

これは最高の解決方法です。この方法では、rootは常に使用しているnpm/nodeの同じバージョンを使用しますあなたはnvmのユーザーに感謝! – luiscvalmeida

+0

あなたは奇跡の労働者です –

2

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

代替ノードのバージョンマネージャーはnhttps://github.com/tj/nです。これは本当のプログラムなので、sudoは、$ PATH経由でハックすることなく($ PATHにsudo/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 
関連する問題