web-dev-qa-db-ja.com

npmはsudoなしでエラーをスローします

Nodejs.orgのパッケージを通してnodeとnpmをインストールしただけで、npmで何かを検索またはインストールしようとすると、コマンドを実行しない限り、次のエラーが発生します。これは権限の問題です。私はすでに管理者です。

npm ERR! Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR!  { [Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/Users/chietala/.npm/-/all/.cache.json' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 12.2.0
npm ERR! command "node" "/usr/local/bin/npm" "search" "bower"
npm ERR! cwd /Users/chietala
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! path /Users/chietala/.npm/-/all/.cache.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/chietala/npm-debug.log
npm ERR! not ok code 0
1082
Chad

これはあなたのホームディレクトリのパーミッションの問題のように見えます。 .npm ディレクトリの所有権を取り戻すには、次のコマンドを実行します。

Sudo chown -R $(whoami) ~/.npm
1955
Noah

npmディレクトリへの書き込みなどを行う場合は、Nodeのインストール時に使用した権限が必要になりますnpm linknpm install -gなど。)。

おそらくルート権限でノードのインストールを実行したため、グローバルパッケージのインストールでルートになるように求められます。


解決策1:NVM

権限でハッキングせずに、正しい方法でノードをインストールしてください。

開発マシンでは、root権限でノードをインストールして実行しないでください。そうしないと、npm linknpm install -gなどに同じ権限が必要になります。

NVM (Node Version Manager)を使用すると、ルート権限なしでNodeをインストールできます。また、Nodeの多くのバージョンをインストールして簡単に操作できます..開発に最適です。

  1. Nodeをアンインストールします(おそらくルート権限が必要です)。 これ が役立つかもしれません。
  2. 次に NVM の指示に従ってインストールします このページ
  3. NVMを介してNodeをインストールします:nvm install node

これで、npm linknpm install -gでrootになる必要がなくなります。

編集:参照 https://docs.npmjs.com/getting-started/fixing-npm-permissions


解決策2:特定のユーザーのパッケージをグローバルにインストールする

パーミッションでハッキングせずに、npmパッケージをグローバルに正しい方法でインストールしてください。

OSXまたはLinuxを使用している場合は、グローバルパッケージのユーザー専用ディレクトリを作成しnpmおよびnodeをセットアップできます。グローバルにインストールされたパッケージを見つける方法を知るため。

this great article をチェックしてください。nudoモジュールをSudoなしでグローバルにインストールする手順を追って説明しています。

参照: npmパーミッションの修正 に関するnpmのドキュメント。

565
Yves M.

また、node_modulesディレクトリへの書き込み権限が必要です。 

Sudo chown -R $USER /usr/local/lib/node_modules
382
Xilo

「システムグローバル」フォルダの所有者を変更するのはハッキングです。新規インストールでは、「ユーザーグローバル」プログラム用に既に書き込み可能な場所を使用するようにNPMを構成します。

npm config set prefix ~/npm

次に、そのフォルダーをパスに追加してください:

export PATH="$PATH:$HOME/npm/bin"

@ ErikAndreas ' answer to NPMモジュールはSudoなしではグローバルにインストールされません および 長いステップバイステップガイド を参照してください= by @ sindresorhus with $MANPATHも設定します。

58
Joel Purra

私はBootstrap 3用に私のCSSをコンパイルするためにRecess( https://github.com/Twitter/recess )をインストールするときにこれに遭遇しました。

くぼみを取り付けるとき:

-npm install recess -g
  1. Noah のように、homeディレクトリのアクセス権をロック解除する必要があります。

    Sudo chown -R `whoami` ~/.npm
    
  2. Xilo のように、node_modulesディレクトリへの書き込み権限も必要です。それでもうまくいかない場合は、次のことを試してください。

    Sudo chown -R `whoami` /usr/local/lib/node_modules
    
  3. それでもエラーが発生する場合は、 /usr/local権限の修正 も必要となるでしょう。

    Sudo chown -R `whoami` /usr/local
    

この記事の に示されているように、あなたがMacを使っているのであれば/usr/local/は実際にはシステムディレクトリではありません。しかし、あなたがLinuxを使っているなら、マルチユーザーフレンドリーでシステムディレクトリセーフな(しかしもっと複雑な)解決策については、 Christopher Will の答えを見てください。 

54
danomarr

他の回答では、システムディレクトリの所有権やアクセス権を特定のユーザーに変更することを提案しています。私はそうすることから非常に不利になります、これは非常に厄介になるかもしれなくて、システム全体を台無しにするかもしれません! 

これはマルチユーザーをサポートする、より一般的でより安全なアプローチです。

ノードユーザー用の新しいグループを作成し、このグループに必要なユーザーを追加します。次に、ノードに依存するファイル/ディレクトリの所有権をこのグループに設定します。

# Create new group
Sudo groupadd nodegrp 

# Add user to group (logname is a variable and gets replaced by the currently logged in user)
Sudo usermod -a -G nodegrp `logname`

# Instant access to group without re-login
newgrp nodegrp

# Check group - nodegrp should be listed as well now
groups

# Change group of node_modules, node, npm to new group 
Sudo chgrp -R nodegrp /usr/lib/node_modules/
Sudo chgrp nodegrp /usr/bin/node
Sudo chgrp nodegrp /usr/bin/npm

# (You may want to change a couple of more files (like grunt etc) in your /usr/bin/ directory.)

今すぐあなたは簡単にユーザーとしてあなたのモジュールをインストールすることができます

npm install -g generator-angular

いくつかのモジュール(grunt、bower、yoなど)はまだrootとしてインストールする必要があります。これは、それらが/ user/bin /にシンボリックリンクを作成するためです。

編集

3年後、 Node Version Manager を使用することをお勧めします。それはあなたに多くの時間と手間をかけません。

35

気を付けろ!!!気を付けろ!!!気を付けろ!!! 

セキュリティリスクのため、chownまたはchmodがNOTソリューションです。

代わりにこれを行ってください:

あなたが電話をするなら、最初にnpmが指すところをチェックしてください。

npm config get prefix

/ usrが返された場合は、次の操作を実行できます。

mkdir ~/.npm-global
export NPM_CONFIG_PREFIX=~/.npm-global
export PATH=$PATH:~/.npm-global/bin

これはあなたのホームディレクトリにnpmディレクトリを作成し、それをnpmにポイントします。

この変更を恒久的なものにするには、export-コマンドを.bashrcに追加する必要があります。

echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=$PATH:~/.npm-global/bin" >> ~/.bashrc
22
suther

EACCESエラーでnpm installパーミッションを修正する方法についての 公式ドキュメント https://docs.npmjs.com/getting-started/fixing-npm-permissions にあります。 

OSXで.pkgインストーラーを使用してノードを新規インストールした後、この問題に遭遇しました。ここにいくつかの素晴らしい答えがあります、しかし私はまだnpmjs.comへのリンクを見ませんでした。

オプション1:権限をnpmのデフォルトディレクトリに変更します

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

    npm config get prefix
    

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

_ warning _ :表示されたパスが /usr だけの場合は、オプション2に切り替えます。

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

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

    これは、npmや他のツール( lib/node_modules bin 、および share )で使用されるサブフォルダのアクセス権を変更します。

オプション2:npmのデフォルトディレクトリを別のディレクトリに変更する

他のユーザーとシステムを共有している場合など、npmが使用するデフォルトディレクトリの所有権を変更したくない場合があります(つまり、 /usr )。

代わりに、別のディレクトリを使用するようにnpmを設定できます。私たちの場合、これは私たちのホームフォルダの隠しディレクトリになります。

  1. グローバルインストール用のディレクトリを作成します。

    mkdir ~/.npm-global
    
  2. 新しいディレクトリパスを使用するようにnpmを設定します。

    npm config set prefix '~/.npm-global'
    
  3. 〜/ .profileファイルを開くか作成して、次の行を追加します。

    export PATH=~/.npm-global/bin:$PATH
    
  4. コマンドラインに戻り、システム変数を更新します。

    source ~/.profile
    
15
HoppyKamper

ここでもっと答えが必要であるかのように、とにかく..

Sindre Sorusは OS XとLinuxにSudoを使わずにnpmパッケージをグローバルにインストールする パーミッションを台無しにせずにきれいにインストールする方法を概説しています: 

これは与えられたユーザのためにパッケージをグローバルにインストールする方法です。

  1. グローバルパッケージ用のディレクトリを作成します

    mkdir "${HOME}/.npm-packages"
    
  2. あなたの.bashrc/.zshrcで将来の使用のためにこのディレクトリを参照してください。

    NPM_PACKAGES="${HOME}/.npm-packages"
    
  3. グローバルにインストールされたパッケージをどこに保存するかをnpmに指示します。 $HOME/.npmrcファイルに以下を追加してください。

    prefix=${HOME}/.npm-packages
    
  4. ノードがそれらを見つけることを確認してください。以下を.bashrc/.zshrcに追加します。

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
    
  5. インストール済みのバイナリとmanページが見つかるようにしてください。以下を.bashrc/.zshrcに追加してください。

    PATH="$NPM_PACKAGES/bin:$PATH"
    # Unset manpath so we can inherit from /etc/manpath via the `manpath`
    # command
    unset MANPATH # delete if you already modified MANPATH elsewhere in your config
    MANPATH="$NPM_PACKAGES/share/man:$(manpath)"
    

上記の手順を自動的に行うための npm-g_nosudo をチェックしてください

最新の更新については このガイドの入手先 をご覧ください。

11
ptim

Npm install -g somepackageを実行すると、root/Administratorとしてコマンドを再実行するように要求するEACCESエラーが発生する場合があります。これは権限の問題です。

それは 修正が簡単です 、あなたの端末を開いてください(Applications> Utilities> Terminal)。

Sudo chown -R $USER /usr/local/lib/node_modules

**後で問題が発生する可能性があるため、Sudoではパッケージ管理を使用しないことを強くお勧めします(Sudo npm -g install something)。

参照: http://foohack.com/2010/08/intro-to-npm/

TL、DR

グローバルパッケージをインストールするためにSudo -iを実行するときは、常にSudo -Hまたはnpm installを使用してください。

-

npmを使用すると、パッケージをユーザーのホームディレクトリにダウンロードします。 Sudoとして実行すると、npmはファイルを同じディレクトリにインストールしますが、現在はrootが所有しています。

ですから、これはnpmを使ったことのあるすべての人に絶対に起こることです。

  • npm install fooを使って問題なくローカルパッケージをインストールする
  • Sudo install -g foo-cliを使って問題なくグローバルパッケージをインストールする
  • npm install barでローカルパッケージをインストールしようとしています
  • npmディレクトリに再度アクセスする必要があるので、chmodデザイナーに不満を感じます

Sudoで-iまたは-Hオプションを使用すると、ホームディレクトリはrootのホームディレクトリになります。どのグローバルインストールでも、/root/.npmroot所有ファイルの代わりに/home/me/.npmにパッケージをキャッシュします。

グローバルパッケージをインストールするためにSudo -iを実行するときは、常にSudo -Hまたはnpm installを使用するだけで、npm権限の問題は解消されます。

いいね。

http://hood.ie/blog/why-you-shouldnt-use-Sudo-with-npm.html

- q.v. すでに犯されたnpmを修正するための一般的な回答.

8
rich remer

Mac用(Christoper Willの回答から採用)

Mac OS X 10.9.4 

  1. システム設定>ユーザーとグループ>(ロック解除)> +を押します。 

    新規アカウント> "グループ"
    アカウント名:nodegrp 

    グループを作成したら、このグループに含まれるようにユーザーをチェックします

  2. Sudo chgrp -R nodegrp/usr/local/lib/node_modules /
    Sudo chgrp nodegrp/usr/bin/node
    Sudo chgrp nodegrp/usr/bin/npm
    Sudo chown -R $(whoami):nodegrp〜/ .npm

6
ken

NPMモジュールはSudoなしではグローバルにインストールされない で同様の問題がありました、問題はノードをインストールしたときにchris/lea ppa経由でSudoでそれをしたrepo

私の解決策は、ノードをアンインストールしてからこの方法でインストールすることでした:

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 $ USER -R/usr/local

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

PD:/ usr/localフォルダーの所有権を変更したくない場合は、既に所有している場所にインストールできます。このアプローチの問題は、後でnodeコマンドを使用できるように、インストールフォルダーをbashコマンドラインでバインドする必要があることです。

mkdir〜/ opt

./configure --prefix =〜/ opt && make && make install

echo 'export PATH =〜/ opt/bin:$ {PATH}' >>〜/ .bashrc #or〜/ .profileまたは〜/ .bash_profileまたは〜/ .zshenv現在のオペレーティングシステムに応じて

これらのアプローチのいずれかを使用すると、Sudoを使用せずに以下を実行できます。

npm install -g module_to_install

6
HeberLZ

私の場合、これは〜/ tmpの許可によるものです。

Sudo chown -R $USER ~/tmp

そしてそれは大丈夫です!

5
bnPYSse

Sudo chown -R $(whoami) ~/.npmがあなたのために働かなかったか、またはあなたは非端末コマンド解決策を必要とします。

問題は、あなたのユーザアカウントはnode_modulesフォルダへの書き込み権限を持っていないので、あなたは次のことができるということです。 

  1. Finderを開き、cmd + shift + gを押すと、URLのあるフォルダに移動します。

  2. 次のパス/usr/local/lib/node_modulesを書き、そしてgoを押してください。

  3. node_modulesフォルダを右クリックしてGet Infoを選択してください

  4. sharing & permissionsセクションまでスクロールします

  5. 変更を加えることができるようにロックを解除します。

  6. +を押してユーザーアカウントを追加してください 

  7. 特権ドロップダウンでRead & Writeを選択していることを確認してください

これでSudoなしでパッケージをインストールでき、パーミッションの問題は解決するはずです 

3
Amr Labib

私にとっては、実行のみ

Sudo chown -R $(whoami) ~/.npm

うまくいきません。それから私も実行

Sudo chown -R $(whoami) /usr/lib/node_modules/
Sudo chown -R $(whoami) /usr/bin/node
Sudo chown -R $(whoami) /usr/bin/npm

そして、すべてうまくいきました!

3
user3753202

これは私がWindows 8.1の問題を解決した方法です:

  • Nodejsインストール(通常はC:\ Program Files\nodejs)に移動します。
  • Node_modulesフォルダを右クリックしてプロパティに移動します。
  • [セキュリティ]タブをクリックして[詳細設定]
  • 上部に「Owner:SYSTEM」と表示されたら、[change]をクリックします。
  • アクセス権を付与するユーザーを入力して[OK]をクリックします。
  • 詳細設定の下部にある[すべての子オブジェクトのアクセス許可エントリをこのオブジェクトの継承可能なアクセス許可エントリに置き換える]チェックボックスをオンにし、[OK]をクリックします
  • あなたが必要とするnpmインストール/アップデートを何でもしなさい
2
KCaradonna

Mac OS Xでは、 Homebrewのbrew install npmを使用してインストールする場合、インストールパスは/usr/local/share/npm/bin/の両方のサブフォルダとともにlib/node_modules/です。

このコマンドを実行して現在ログインしているユーザーの所有者に変更すると、すべて修正され、SudoなしでグローバルNPMパッケージをインストールできるようになります。

Sudo chown -R $USER ~/.npm /usr/local/share/npm/

osx自作

2
Joel Purra

問題: npmがグローバルパッケージやコマンドを保存するのに使うディレクトリに書き込む権限がありません。

解決策: npmに許可を与えます。

端末を開く:

command + Spaceキーを押してから 'terminal'と入力します。

次のコマンドを入力してください。 

Sudo chown -R $(whoami)$(npm config get プレフィックス)/ {lib/node_modules、bin、share}

  • 注意:これにはパスワードが必要になります。

このソリューションでは、必要なディレクトリのみを許可し、他のディレクトリを素晴らしく安全に保つことができます。

2
Matt

_ issue _ :あなた(ユーザ)はディレクトリに対する適切な権限を持っていません。

即座の解決策はSudoを使ってnpmインストールを実行することですが、これはあなたに同じエラー、または不適切なインストールを与えるかもしれません。

また、ディレクトリの所有権を変更することは良い方法ではありません。一時的なパッチです。


解決策 / 提案 :npmのデフォルトディレクトリを変更する(official docs から)

進む前にコンピュータをバックアップしてください。

(省略可能)インストールに誤りがある場合は、まずそれをアンインストールします。

npm uninstall <package-name>  # use Sudo if you used it while installation
npm cache verify  # or, npm cache clean for npm version below 5.x.x 
  1. グローバルインストール用のディレクトリを作成します。 

    mkdir ~/.npm-global

  2. 新しいディレクトリパスを使用するようにnpmを設定します。 

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

  3. ~/.profileまたは~/.bash_profileファイルを開くか作成して、次の行を追加します。 

    export PATH=~/.npm-global/bin:$PATH

  4. コマンドラインに戻り、システム変数を更新するか、または端末を再起動します。 

    source ~/.profile

  5. (オプション)テスト:Sudoを使わずにパッケージをグローバルにダウンロードします。

    npm install -g jshint

2
Nabeel Ahmed

Npmのインストール中、またはMacでパッケージをグローバルにインストールしたい場合は、以下のようなポップアップが表示されます

npm ERR!コードEACCES
npm ERR! errno -13
npm ERR!システムコールアクセス

1
Ignatius Andrew

実は私も同じ問題を抱えていました。私はUbuntuを実行していました。私の問題は、私がUbuntuの公開鍵をなくしたために起こります。私のシステムを更新しても起こらなかった。 GPGエラーが発生していました。その場合は、次のコマンドを使って鍵を取り戻すことができます。

Sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <key in GPG error>

その後、npmはうまく機能します。

1
sam100rav

John Papaはこの問題の背後にある歴史と推論を指摘し、 しっかりとした修正を :に与えます。

John Papaのステップは次のとおりです。 

  1. Npmなしでノードをインストールするためにbrewを使う
  2. あなたの.bash_profile/.bashrcを更新して、npmとnodeにパッケージのインストール場所と検索場所を知らせます。
  3. Brewを使ってノードを更新し、npmを使って自分自身を更新します。

これが好奇心に役立つことを願っています!

1
theship

@Yves M.の答えは私の解決策と非常によく似ていました。これが私が使ったコマンドで、彼とは少し異なっています。

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash

それから最新バージョンを問い合わせます。

nvm ls-remote

それから最新バージョンをインストールしてください。

nvm install YOUR_VERSION_HERE

nvm install v5.8.0
0
Ryan Loggerythm

所有者をrootから自分のユーザー名に変更して解決します

Sudo chown -R me:me /home/me/.config/configstore/

あなたのユーザー名とグループを変えてください。

0
Salem

所有者を変更するのではなく、これを達成するためにubuntuグループを使用するのが好きです。それはとても簡単です。

  1. 最初にapt-getを使ってnodejsとnpmをインストールします。

    Sudo apt-get update && Sudo apt-get install nodejs npm

  2. 誰がログインしているか、つまりusernameを把握し、以下のコマンドを実行してターミナルでそれを確認します。

    whoami

  3. あなたはあなたが割り当てられたグループのリストを見ることができます非常に簡単なコマンドを使って、通常最初のグループはあなた自身のユーザー名です

    groups

  4. ログインユーザーにアクセスを許可するには、以下を実行してください。

    Sudo chmod 777 -R /usr/local && Sudo chgrp $(whoami) -R /usr/local

  5. Npmとnodejsを更新する

    npm install -g npm

あなたは大丈夫です、あなたのユーザはSudoなしでnpmコマンドを実行できます

また、このリンクを参照することができます https://askubuntu.com/a/1115373/687804

0
Gitesh Dalal

John Papaの記事 に続くいくつかの手順を次に示します。

  • インストールNode.js from nodejs.org/en/download

  • npm$ npm install npm -gの最新バージョンに更新します

  • npmグローバルパッケージ$ mkdir ~/.npm-packages用の新しいフォルダーを作成します

  • 教えてくださいnpmどこでそれらを見つける/保存するか$ npm config set prefix ~/.npm-packages

インストールを確認する

これはバージョンを表示する必要があります

node -v 
npm -v

エラーなしでnpmとngが表示されるはずです

npm list -g --depth=0

それがあなたのために働くことを願って、それは私のために働いた!

0
Carlos Abraham

ディレクトリ/usr/local/lib/npm_modulesのパーミッションを変更しても役に立たない場合、ユーザーをグループに追加する必要があります(ほとんどの場合、これは/usr/binディレクトリのrwx権限を持っているstaffグループです)。 npmは/usr/bin/__package__symlinkを作成しようとするためです。

追伸ユーザーグループを変更した後に再ログインすることを忘れないでください

0
Victor Perov

これが私が利用して解決した解決策です。私はwhoamiを使ってみましたが、うまくいきませんでした。

Sudo chown -R $USER /usr/local/lib/node_modules

それから

Sudo chown -R $USER /usr/local/bin/npm

それから

Sudo chown -R $USER /usr/local/bin/node

0
Casey Robinson

私にとって最良のオプションは npmのドキュメント で提案されているもののようです。これは最初にグローバルなnode_modulesがデフォルトでどこにインストールされているかをnpm config get prefixを実行して確認することです。もし私がTrustyでやっているように/usrを手に入れたのなら、私のやり方を乱すことなく安全に所有できるフォルダに変更したいかもしれません。

それには、システムに新しいフォルダを選択または作成します。私はMacユーザーでもあるので、自分のホームディレクトリに置くか、私と同じように/usr/localの下に置くことをお勧めします(私が目の前にいるマシンによっては異なる場所を調べる必要はありません)。 。これを行うもう1つの理由は、/usr/localフォルダーがおそらく既にPATHに入っているということです(ただし、PATHをいじらないのでない限り)が、新しく作成したフォルダーがそうではないため、追加する必要がある可能性があります。 .bash-profile または .bashrc ファイルにPATHを追加してください。

手短に言うと、グローバルモジュールのデフォルトの場所をnpm config set prefix '/usr/local'で変更し、フォルダ/usr/local/lib/node_modulesを作成し(npmで使用されます)、npmで使用されるフォルダのアクセス権を次のコマンドで変更しました。 

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

これで、モジュールを安全にグローバルにインストールできます。お役に立てれば!

0
yago

あなたはこれを試すことができます 

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

NPMを正しく構成するためのもう1つの大きな修正は、以下のコマンドを実行することです。

npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH
0