web-dev-qa-db-ja.com

NPMモジュールはsudoなしではグローバルにインストールされません

buntu 12.04 LTSを再インストールしたばかりで、何よりも先にこれらの手順を実行しました

  1. 次のスクリプトを使用して、パッケージマネージャー経由でNodeをインストールしました

    Sudo apt-get update
    
    Sudo apt-get install python-software-properties python g++ make
    
    Sudo add-apt-repository ppa:chris-lea/node.js
    
    Sudo apt-get update
    
    Sudo apt-get install nodejs
    
  2. Yeoman、express、n、yeomanのジェネレーターをグローバルにインストールしようとしましたが、それらはすべて同じエラーを返しました

    npm ERR!エラー:EACCES、シンボリックリンク '../lib/node_modules/n/bin/n'

    npm ERR! {[エラー:EACCES、シンボリックリンク '../lib/node_modules/n/bin/n'] errno:3、コード: 'EACCES'、パス: '../lib/node_modules/n/bin/n'}

    npm ERR!

    npm ERR!このコマンドをroot/Administratorとして再度実行してください。

    npm ERR!システムLinux 3.8.0-29-generic

    npm ERR!コマンド "/ usr/bin/node" "/ usr/bin/npm" "install" "-g" "-d" "n"

    npm ERR! cwd/home/heberlz

    npm ERR! node -v v0.10.20

    npm ERR! npm -v 1.3.11

    npm ERR!パス../lib/node_modules/n/bin/n

    npm ERR!コードEACCES

    npm ERR! errno 3

    npm ERR!スタックエラー:EACCES、シンボリックリンク '../lib/node_modules/n/bin/n'

    npm ERR!

    npm ERR!追加のログの詳細は、次の場所にあります。

    npm ERR! /home/heberlz/npm-debug.log

    npm ERR! OKコード0ではない

  3. 次のフォルダの所有権を再帰的に回収〜/ .npm、/ usr/lib/node、/ usr/lib/node_modules、および次のシンボリックリンク/ usr/bin/node、/ usr/bin/nodejs 絶対に成功しない

後で問題にならないように、sudoなしでyeomanとそのジェネレーターをインストールする必要があります:(

119
HeberLZ

Ubuntu 12.04で、Chris LeaのPPAを使用して次のインストールを行ってください。

npm config set prefix '~/.npm-packages'

$ HOME/.npm-packages/binを$ PATHに追加します

.bashrcに追加

export PATH="$PATH:$HOME/.npm-packages/bin"

https://stackoverflow.com/a/18277225 from @passyを参照

308
ErikAndreas

パスに$HOME/binが既にある場合、より簡単な解決策は...

npm config set prefix ~
  • これで、新しいノードコマンドが$HOME/binディレクトリにインストールされます。
  • パスを変更する必要はありません!

この説明はSudoを実行することのセキュリティリスクを減らすことに関するものなので、どのノードアプリも、インストールしようとしている登録済みノードパッケージ名と一致しないアプリ名をインストールする可能性があることに注意する必要があります。したがって、npm installが既存のシステムコマンドまたは$HOME/binにすでにあるシステムコマンドを置き換えるというセキュリティリスクがあります。心配な場合は、最初にインストールするアプリの package.json ファイルの bin および scripts プロパティを確認してください。

一般的に、次のことが最も安全です。

  • (a)システムコマンドが置き換えられないように、パスの最後に$HOME/binを配置します。
  • (b)「。」を含めないでくださいまたは$PATHの相対パスを使用して、誤って現在のディレクトリにあるコマンドを実行しないようにします。

参照:

21
Tony O'Hagan

2014年10月の場合:

Node.jsは、NodeSource DebianおよびUbuntuバイナリディストリビューション repository から入手できます。

curl -sL https://deb.nodesource.com/setup | Sudo bash -
Sudo apt-get install -y nodejs

それでおしまい。

古い回答:

Sudoを使用しない最速の方法は、説明されているようなものです ここではisaac

Sudoでパッケージ管理をしないことを強くお勧めします!パッケージは任意のスクリプトを実行できます。これにより、チェーンソーのヘアカットと同じくらい安全なパッケージマネージャーコマンドをsudoingできます。確かに、それは速く、間違いなくどんな障害物も通り抜けようとしますが、実際にその障害物をそこにとどめて欲しいかもしれません。

代わりにこれを一度行うことをお勧めします:

Sudo chown -R $USER /usr/local

編集:

/ usr/localの所有権を現在のユーザーに変更することに関して、特定のセキュリティ上の懸念と機能制限があります。

そうは言っても、Sudoを使用せずにグローバルモジュールをインストールする場合、(実用的な観点から)言及されたものよりも優れたソリューションはありません。セキュリティと使いやすさは非常に幅広いトピックであり、それに対する簡単な答えはありません-それは単にあなたの要件に依存します。

13

問題はSudoを使用してノードをインストールしました、npmモジュールをグローバルにインストールする際のエラーを回避するために、Sudoを使用してノードをインストールしないでください。

私の解決策は、reinstall node it this way:

Nodejs.orgから最新の安定したノードソースをダウンロードします#私の場合、node-v0.10.20.tar.gz

tar -zxf node-v0.10.20.tar.gz #uncompress sources

cd node-v0.10.20#非圧縮フォルダーを入力

Sudo chown -R $ USER/usr/local

./configure --prefix =/usr/local && make && make install

注意すべきことの1つは、ノードのインストール自体がSudoで作成されているため、/ usr/localフォルダの所有権を取得するだけでは機能しないことです

Yeomanをインストールするための最後のステップ:#yeoman.ioで「npm install -g yo」を実行すると、すでにbowerとgruntがインストールされると言われますが、失敗するgruntのサブモジュールがいくつかあるため、それを単独でインストールすることで修正しました

npm install -g bower

npm install -g grunt

npm install -g yo

npm install -g generator-angular

10
HeberLZ

環境変数とシェルエイリアスでこの問題を解決しました。

export NPM_PREFIX=$HOME/node
alias npmg="npm -g --prefix $NPM_PREFIX"

私にとって、npmは.npmrcの「prefix」設定設定を尊重しませんでした。

4
santervo

Npmのディレクトリへのパスを見つけます。

npm config get prefix

多くのシステムでは、これは/ usr/localになります。

Npmのディレクトリの所有者を現在のユーザーの名前(ユーザー名!)に変更します。

Sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

これにより、npmおよびその他のツール(lib/node_modules、bin、およびshare)によって使用されるサブフォルダーのアクセス許可が変更されます。

詳細はこちらのリンクをご覧ください

https://docs.npmjs.com/getting-started/fixing-npm-permissions

3
Monis Majeed

この同様のSO投稿によると、 npmはSudoなしでエラーをスローします

~/.npmディレクトリの所有権の問題があるようです。

その1つの答えと同様に、試してください:

Sudo chown -R `whoami` ~/.npm
2
prasanthv

実際には、rootが所有するユーザーフォルダーのアクセス許可を変更しました。

Sudo chown -R $USER ~/.config/configstore

その後、Sudoなしで「npm install」と「bower install」を実行できました。うまくいきました!

1
Vinggui

開発中のマシンを使用している場合は、 nvm の使用を検討した方がよい場合があります。

そうでない場合は、お気に入りのパッケージマネージャーを使用してインストールするだけです。

どんな場合でも、私は stackoverflowでこの答えを確認する をお勧めします

1
Iam Zesh

lubuntu 14.04.3を使用して、.npmおよびnpmプレフィックスの所有権を変更しようとし、パスを更新し、npmがSudoなしでホームディレクトリにモジュールをインストールしましたが、パスが正しくなかったためemberなどのモジュールが見つかりませんでした。 linuxbew 問題を解決した、クイックセットアップガイド here for node/npm

0
Conor

同じ問題が原因で発生するこの問題およびその他の問題は、ユーザースペースにNodeをインストールすることで解決できます。

ターミナルでコピー&ペーストするだけでできます

NODEJS_ROOT=${NODEJS_ROOT:-~/nodejs}
cd /tmp
wget -N http://nodejs.org/dist/node-latest.tar.gz && tar xzf node-latest.tar.gz
NODEJS_CURRENT=$(tar tf node-latest.tar.gz|head -1)
mkdir -p $NODEJS_ROOT/$NODEJS_CURRENT
cd $NODEJS_CURRENT
./configure --prefix=$NODEJS_ROOT/$NODEJS_CURRENT && make install
cd $NODEJS_ROOT
rm current 2> /dev/null # Removes current symbolic link, if any
ln -s $NODEJS_CURRENT current

同じコマンドを起動して、Nodeを最新バージョンに更新することもできます。

環境を編集することを忘れないでください。一度だけ

echo "export NODEJS_ROOT=$NODEJS_ROOT"            >> $HOME/.bash_profile
echo 'export PATH=$NODEJS_ROOT/current/bin:$PATH' >> $HOME/.bash_profile
source $HOME/.bash_profile # reload your env, so you can use node right now

SudoなしでNode.jsをインストールする の方法については、この記事を参照してください。

このトピックに関するより一般的なソリューション(つまり、ソフトウェアをローカルにインストールする)については、 dotsoftware を参照してください。

0
Gianluca Casati