npmがsudoなしでエラーをスローする


1287

nodejs.orgのパッケージを介してnodeとnpmをインストールしました。npmで何かを検索またはインストールしようとすると、コマンドをsudoで実行しない限り、次のエラーがスローされます。これは許可の問題だと思いますか?私はすでに管理者です。

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

35
NVMを使用した解決策を検討しください:stackoverflow.com/a/24404451/1480391(権限でハッキングするのではなく)
Yves M.

2
@janaspage NPM(ノードパッケージマネージャー)を介してノードまたはNVM(ノードバージョンマネージャー)をインストールすることはできません。NPMはノード内にあります(同時にインストールされます)。ウィキペディアのページをご覧ください:en.wikipedia.org/wiki/Npm_(software)
Yves M.

5
より良いよりも最後に解決策sudo chowngithub.com/sindresorhus/guides/blob/master/...
ドミトリ・ザイツェフ

OSXと0official pkg intallerのインストールノードの下で、このソリューションは機能しませんでした。代わりにこれを使用しました:stackoverflow.com/a/34968008/675565
fmquaglia

2
問題と修正について説明しています:docs.npmjs.com/getting-started/fixing-npm-permissions
n00b

回答:


2269

これは、ホームディレクトリの権限の問題のようです。.npmディレクトリの所有権を取り戻すには、次のコマンドを実行します。

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

102
whoamiプレースホルダーだと思ったのですが、文字通りそのまま入力できるので、分からない変数に違いありません。
SimplGy 2013年

127
whoamiは実際のシェルコマンドen.wikipedia.org/wiki/Whoamiです。周りのバッククォートwhoamiにより、それが正しく実行され、chownコマンドに配置されることが保証されます
Noah

13
ユーザー名を手動で指定することもできます。ユーザー名が「simpleascouldbe」の場合、コマンドはsudo chown -R simpleascouldbe ~/.npm
Noah

13
npmはsudoを必要とせず、使用するべきでもありません。@ HeberLZの下の回答、特に次の2番目のオプションを参照してください。./configure --prefix = xxxxxx
Scott Stensland

9
@ChristopherWill:これはシステムディレクトリの所有権を変更しません。これにより、ユーザーが所有する必要があるユーザーのホームディレクトリ内のディレクトリの所有権が変更されます。
user4815162342 2014

620

あなたの書き込みのようなものやったときにノードをインストールするときに使用したアクセス許可が必要になりますNPMディレクトリをnpm linknpm install -gなど)。

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


解決策1:NVM

パーミッションでハッキングしないでください。ノードを正しい方法でインストールしてください。

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

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

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

これでnpm linknpm install -gルートである必要がなくなります。

編集:https ://docs.npmjs.com/getting-started/fixing-npm-permissionsも参照してください


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

権限でハッキングしないでください。npmパッケージをグローバルに正しい方法でインストールしてください。

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

チェックアウトこの素晴らしい記事世界的にsudoなしNPMモジュールのインストールに関するステップバイステップのインストラクションのために。

参照:npm権限の修正に関するnpmのドキュメント。


32
ここに掲載されているすべてのソリューションの中で、NVMソリューションは私にとって最良の結果をもたらしました。権限をいじるのではなく、NVMを使用することを強くお勧めします。
wenincode 14

9
これらの指示は非常にうまくいきました。しかし、あなたはおそらくしたいと思うnodejsをアンインストールする前に、あなたは、sudoでインストールしたモジュールを取り外すnpm ls -gp | awk -F/ '/node_modules/ && !/node_modules.*node_modules/ {print $NF}' | xargs npm -g rm-私はnodejsを再インストールしなければならなかったし、rootシェルで、それらをアンインストールし、そうでなければ、などよ、イサキ、へのシンボリックリンクを持ち続けるだろう...
BrunoFlávio14年

4
これが最善の解決策です。私は最初にすべてのモジュールを削除し、sudo npm list -g --depth=0. | awk -F ' ' '{print $2}' | awk -F '@' '{print $1}' | sudo xargs npm remove -g stackoverflow.com / npmnvm
Fabio Antunes

3
ノード用のアンインストールの手順このSOの回答についてはstackoverflow.com/a/11178106/480031
seangates

3
rootを使用して本番マシンにノードをインストールしてもよいのはなぜですか?
Bruno Peres

401

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

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

7
同様~/tmpに私のためのディレクトリ。
Knowasilya 2013年

123
なぜこれがまだ賛成票を獲得するのか、私にはわかりません。システムディレクトリの所有権を特定のユーザーに変更するのは非常に悪い習慣です!他のソリューションについては、以下の回答を参照してください(ノードユーザー用に別のグループを作成するなど)。
クリストファーウィル

1
私は持っていませんnode_modulesの中で/usr/local/lib/。wtf?
コナーリーチ2014

27
何をしても-絶対に/ usr / local / libまたは/ usr / lib /で 'sudo chmod -R whoami'を実行しないでください。sudoersファイルが台無しになり、自分が嫌いになります。
qodeninja 2015年

7
皆さん、これに反対投票してください...- Then I ran sudo chown -R $USER /* and everything was fineいいえ-あなたはあなたのマシンを台無しにしています。
commonpike 2015年

75

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

npm config set prefix ~/npm

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

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

参照してください@ErikAndreas答えNPMモジュールは、sudoをすることなく、世界的にインストールされません し、長いステップバイステップガイド@sindresorhusもセットで$MANPATH


私は強く同意しますが、プレフィックスを単にに設定しただけの場合$HOME、通常は.profileスクリプトが$PATH次にソースするとき(たとえば、次回ログインするとき)に処理を行うことをお勧めします。
ジェスオースティン

@JessAustin:おそらく、しかしそれはまたあなたにもっと混乱をもたらし$HOME、他の(将来の?)NPMファイル/サブフォルダに干渉するかもしれません。異なるパッケージマネージャー/言語/ビルドシステムからのバイナリを分離し、$PATH代わりに(ログイン時のスクリプトで)明示的に設定することをお勧めします。
Joel Purra、2014

ええ、乱雑?ここでは、グローバルにインストールされたモジュールと~/lib/node_modules、それに関連付けられているCLI(存在する場合)について説明してい~/binます。多くのユーザーにとって、特にrootを持っていない場合は~/bin~/libすでに存在しています。
ジェスオースティン

@JessAustin:ライブラリとバイナリの名前の衝突の問題でもあります。NPMがバイナリを配置~/binするように指定し、1つまたは2つの追加のパッケージマネージャーに対して同じことを実行するとします。それは今日も明日も起こらないかもしれませんが、異なるマネージャーからの2つのパッケージが名前の衝突を持ち、お互いのファイルを上書きするという明らかなリスクがあります。これは、別のプレフィックスを持つのに十分なケースです。(具体的な例をいただければ
幸い

1
これは最良の回答として受け入れられるべきです。システムグローバルフォルダーを変更すると危険な場合があります。
Vladimir Marton

58

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

この投稿に 示さ/usr/local/ているように、Macを使用している場合、実際にはシステムディレクトリではないこと注意してください。したがって、この回答はMacユーザーにとって完全に「安全」です。ただし、Linuxを使用している場合は、以下のChristopher Willの回答を参照して、マルチユーザーフレンドリーなシステムディレクトリセーフ(しかしより複雑な)ソリューションを見つけてください。


35
これは悪い考えです。システムディレクトリを特定のユーザーに所有させたくない場合があります。深刻なセキュリティの懸念に加えて、これもマルチユーザー互換ではありません。
Christopher Will

2
はい。ただし、すでにnode.jsをインストールしていて、そのまま使い続ける必要がある場合は特に、開発環境+2に最適なソリューションです。
elliotrock 2014

ホームディレクトリ以外にパッケージを所有するべきではありません
Ben

1
それがホームフォルダーにない場合は、反対の主張はありますが、システムディレクトリです。OS Xで使用されていないからといって、システムディレクトリではないという意味ではありません。
リッチリマー

53

気を付けて!!! 気を付けて!!! 気を付けて!!!

セキュリティ上のリスクがあるため、chownまたはchmodはソリューションではありません

代わりに、これを実行します。

最初に、npmが指す場所を確認します。

npm config get prefix

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

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

これにより、ホームディレクトリにnpm-Directoryが作成され、npmそれがポイントされます。

この変更を永続的にするには、export-commandを.bashrcに追加する必要があります。

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

/ usrを取得した場合のみ、オプション2に切り替える必要がありますか?
Albert Laure

3
最後のコマンドは実際に$PATHは文字列自体ではなく、のコンテンツを出力することに注意してください。あなたはそれを変えるべきです。
ヴェルリア2018

1
これで解決しました!ありがとうございました。「権限が拒否されました、リンクを解除してください/ usr / bin / <pkg>」
valbaca

1
これが最良の答えです。これは、問題を解決するための推奨される方法です。
パウロコギ-モニカを復活させる

なぜセキュリティリスクを厳しくしているのですか?
フランク

40

他の回答は、システムディレクトリの所有権または権限を特定のユーザーに変更することを提案しています。私はそうすることを強くお勧めしません、これは非常に扱いにくくなり、システム全体を台無しにするかもしれません!

マルチユーザーもサポートする、より一般的で安全なアプローチを次に示します。

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

# 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を使用することをお勧めします。多くの時間とトラブルを防ぎます。


2
ノードがソースによってインストールされている場合、マルチユーザーは問題になりますが、すべてのモジュールはsudoを使用しなくても完全に機能します。yeomanモジュールの場合、sudoの実行が許可されないため、人々はyeomanアプリケーションをsudoingしてジェネレーターを更新できないため、これも非常に重要です:(
HeberLZ

1
Linuxでは、通常、組み込みstaffグループを使用して、開発フォルダーへのアクセス許可を与えます。また、実行chmod g+ws node_modulesして、グループに読み取り/書き込み権限があることを確認することをお勧めします。
jackvsworld 2015

@jackvsworldスタッフのグループは知らなかった。新しい架空のグループを作成する必要がないので、これはよりスムーズな解決策になると思います。しかし、この入力に感謝します。
クリストファーウィル

一般的に言って、/usr/libはシステムパッケージマネージャーの制御下にあり、そこで変更を加えるべきではありません。
リッチリマー

23

公式ドキュメント修正する方法についてnpm installと権限のEACCES誤差は次の場所にありますhttps://docs.npmjs.com/getting-started/fixing-npm-permissions

.pkgOSXでインストーラーを使用してノードを新規インストールした後、この問題が発生しました。ここにはいくつかの素晴らしい答えがありますが、npmjs.comへのリンクはまだ表示されていません。

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

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

    npm config get prefix

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

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

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

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

    これにより、npmおよびその他のいくつかのツール(lib / node_modulesbin、および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

1
おかげで、これは、chownソリューションが機能しなかったので、私にとってはうまくいきました。あなたは私を救いました。
fmquaglia 2016

/ usrを取得した場合のみ、オプション2に切り替える必要がありますか?
Albert Laure

私はこの回答のオプション2が大好きです。(1)sudoを使用することによるセキュリティの脆弱性はありません、(2)他のユーザーのアーキテクチャを保持します、(3)ドキュメントを参照します、そして(4)必要なコマンドラインを持っていますエントリが含まれています。追加してくれてありがとう!
トム・ローズ

では、シンボリックリンクされたものをインストールするとどうなり/usr/bin/ますか?これで、ユーザーだけがそれにアクセスできます。ファイルは実際には別のユーザーのホームディレクトリにあるため、他のユーザーとしてログインしても、アクセスできません。
フランス、

これでうまくいきました。コマンドに加えて説明をありがとう。
FrankByte.com

12

ここでさらに回答が必要であるかのように、とにかく。

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を確認してください

このガイドソースで最新のアップデートを確認してください。


2
編集のためのtx @AndyHayden :)上記のコメントで推奨される方法は、NVMを使用することです。stackoverflow.com/a/24404451/1480391
ptim

私のために働いた唯一の解決策は、アクセス許可をいじる必要がありません。私はNPMとそのばかげた許可の愚かさを嫌います。解決策をありがとう!
RyanNerd 2018

8

TL; DR

常に、sudo -iまたはsudo -H実行時にnpm installグローバルパッケージをインストールするために使用します。

-

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

したがって、これはこれまでに使用したことがあるすべての人に絶対に起こりnpmます:

  • を使用して問題なくいくつかのローカルパッケージをインストールします npm install foo
  • sudo install -g foo-cli問題なく使用してグローバルパッケージをインストールする
  • ローカルパッケージをインストールしようとする npm install bar
  • もう一度ディレクトリnpmに移動chmodする必要があるため、デザイナーに不満を感じる

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

常に、sudo -iまたはsudo -H実行中npm installにグローバルパッケージをインストールすると、npm権限の問題が解決します。

いいでしょう

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

- QVすでに犯さ固定用の受け入れ答えnpm


最善かつ簡単な修正
Manjeet Singh

6

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

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

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#または〜/ .profileまたは〜/ .bash_profileまたは〜/ .zshenv現在のオペレーティングシステムに応じて

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

npm install -g module_to_install


1
私はこの方法を使用してしまいました。sudo chown $USER /use/local構築する前に使用しました。これまでのところよさそうです、原子を構築するための時間です!ありがとう!
prasanthv 2014年

6

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

それはだ修正に簡単に、あなたのターミナル(アプリケーション>ユーティリティ>ターミナル)を開き

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

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

リファレンス:http : //foohack.com/2010/08/intro-to-npm/


わーい!これは私にそれをやった!上記の他、他のものをやった後:sudo chown -R `whoami` ~/.npmsudo chown -R `whoami` /usr/local/libおよび
レジスZaleman

8
これは、他のアプリの多くが付いているアクセス許可の問題を引き起こす可能性がありますので、私はお勧めしたいではないこれを行います。なぜある缶のワームを別の缶と交換するのですか?
Brad Parks

1
または、少なくとも/ usr / local / lib / node_modulesに調整します。
Ken

これ、これ、もっとこれ。壁に頭をぶつけた後、これでうまくいきました。+1
dashard 2015年

これは私の問題でした。新しいmacbook(os x 10.10.3)では、/ usr / local / lib / node_modulesの権限は次のとおりです。$ ll / usr / local / lib / node_modules total 0 drwxr-xr-x 3 24561 wheel 102B Mar 31 18:19 。drwxrwxr-x 4 24561 admin 136B Mar 31 18:19 .. drwxr-xr-x 26 65534 staff 884B Apr 13 10:53 npm
tkane2000

5

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


1
いくつかのパスを/ usr / local / binに変更する必要がありましたが、それ以外の場合、このソリューションはOX X 10.9マシンでうまく機能しました-ありがとう!
splig 2014年

システムディレクトリの所有権を変更するのは悪い習慣です。
リッチリマー

@richremerそれはあなたが達成しようとしていることに依存すると思います。フォルダーが元々sudoerによってのみアクセス可能である場合、この方法でのみ変更できます。変更をnpmに関連するフォルダーに制限します。sudo通常のユーザーが変更できるように、これらのフォルダーグループの所有権を維持または変更する方が安全でしょうか?通常のユーザーがこのフォルダに対してアクションを実行することを想定していない場合は、もちろん、フォルダのグループ所有権を変更しないでください。
ケン

適切なことは、sudoを使用してグローバルパッケージをインストールすることですが、-Hフラグを使用してインストールします。具体的には、sudo -H npm install -g <pkg>。これにより、システムフォルダーとユーザーフォルダーのアクセス許可を適切に区別できます。sudo npm install -grootが所有するファイルがユーザーディレクトリにインストールされるため、使用したくないのはuse です。npmが正しい方法でこれを行うのに十分スマートであるなら素晴らしいですが、そうではないので、-Hsudoフラグを使用して正しくグローバルにインストールする必要があります。
リッチremer

4

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

sudo chown -R $USER ~/tmp

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


4

私は実行のみ

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

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


あなたはとても素晴らしい先生です:)
user805981

のファイル/usr/libはシステムファイルであり、個人のユーザーアカウントが所有することはできません。
リッチリマー

4

問題:あなた(ユーザー)には、ディレクトリに対する適切な権限のセットがありません。

すぐに解決策は、sudoを使用してnpmインストールを実行することですが、これにより同じエラーが発生したり、インストールが不適切になったりする場合があります。

また、ディレクトリの所有権を変更することは、一時的なパッチである適切なオプションではありません。


解決策 / 提案:npmのデフォルトディレクトリを変更します(公式ドキュメントから)

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

(オプション)インストールが誤っている場合は、まずアンインストールします。

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


3

場合はsudo chown -R $(whoami) ~/.npmあなたのために働くか、非ターミナルコマンド・ソリューションを必要としませんでした。

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

  1. ファインダーを開いて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

問題:npmがグローバルパッケージとコマンドを格納するために使用するディレクトリへの書き込み権限がありません。

解決策:npmの許可を許可します。

端末を開きます。

コマンド+スペースバー、次に「ターミナル」と入力します

次のコマンドを入力します。

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
  • 注:これにはパスワードが必要です。

このソリューションでは、必要なディレクトリのみにアクセスを許可し、他のディレクトリを安全に保護します。


システムフォルダーのユーザー所有権の設定は反パターンであり、これはそのことを考慮していないため、反対票を投じます。npm config get prefixホームフォルダーに何かを返す特別なケースでは、このソリューションはアクセス許可を修正しますが、共有環境に安全な方法でグローバルパッケージをインストールするという根本的な問題には対処しません。
リッチリマー

これにより、オペレーティングシステムの大部分の権限が書き換えられます。たとえば、Ubuntuでこれを実行すると、「sudo」コマンド自体が使用できなくなります。
Sahand Seifi

2

NPMを適切に構成するためのもう1つの優れた修正は、次のコマンドを実行します。

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

2

あなたはこれを試すことができ、ubuntuとmacで動作します

sudo chown -R $(whoami) /usr/local/lib/node_modules

1
私はこれを実行して、Macで100%動作しました:sudo chown -R $(whoami)/ usr / local / lib / node_modules
leeroya

1

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

これを行うには、システムで新しいフォルダを選択または作成します。/usr/local私はMacユーザーでもあるので、私のように、一貫性を保つために、ホームディレクトリに置くことをお勧めします(たまたま前にあるマシンに応じて、別の場所を調べる必要はありません)。これを行うもう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}

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


1

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

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

1

最善の解決策は、npmのドキュメントで提供されているこれです。


Ubuntuの場合、推奨されるソリューションはOption#2です。

簡単な手順:
グローバルインストール用のディレクトリを作成します。
mkdir ~/.npm-global

新しいディレクトリパスを使用するようにnpmを構成します。プレフィックスが更新されたかどうかを確認するのに役立ちます。結果は<Your Home Directory> /。npm-globalになります。
npm config set prefix '~/.npm-global'
npm config get prefix

〜/ .profileファイルを開くか作成して、次の行を追加します。
export PATH=~/.npm-global/bin:$PATH

コマンドラインに戻り、システム変数を更新します。
source ~/.profile

ステップ2から4の代わりに、対応するENV変数を使用することもできます(例:〜/ .profileを変更したくない場合):

NPM_CONFIG_PREFIX=~/.npm-global


Macの場合、推奨ソリューションはOption#3です。

Mac OSでは、Homebrewパッケージマネージャを使用して、この問題を完全に回避できます。

brew install node


このNPM_CONFIG_PREFIXは機能しません。これはnpm-descriptitonのエラーです。上記の私の投稿を見て、正しい方法でそれを行う方法:stackoverflow.com/a/41395398/1256697
suther

1

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

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

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


1

私は、所有者を変更するのではなく、ubuntuグループを使用してこれを実現するのが好きです。とてもシンプルです。

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

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

  2. ログインしているユーザー、つまりユーザー名を特定し、次のコマンドを実行してターミナルで確認します

    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

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

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

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


1
今日ではnpm config代わりにを使用するこの質問に対する私の別の回答をお勧めします。
Joel Purra、2014年

0

実際、私も同じ問題を抱えていました。Ubuntuを実行していました。Ubuntuの公開鍵を紛失してしまったため、鉱山問題が発生しました。システムを更新することさえ起こりませんでした。GPGエラーが発生していました。その場合、次のコマンドを使用してキーを取り戻すことができます。

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

その後、npmは正常に動作します。


0

ジョンパパはこの問題の背後にある歴史と推論を指摘し、確実な修正を提供します

ジョンパパの手順は次のとおりです。

  1. bpmを使用してnpmなしでノードをインストールする
  2. .bash_profile / .bashrcを更新して、npmとノードにパッケージのインストール場所と検索場所を知らせます
  3. brewを使用してノードを更新し、npmを使用してそれ自体を更新する

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


0

これは私が利用して取り組んだソリューションです。効か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

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