エラー:EACCES:権限が拒否されました。アクセス '/ usr / local / lib / node_modules'が反応します


298

エラーの原因は何Error: EACCES: permission denied, access '/usr/local/lib/node_modules'ですか?

npm ERR! path /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!  { Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/local/lib/node_modules' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/macbookmd101/.npm/_logs/2018-02-21T16_26_08_421Z-debug.log

9
:この解決方法でNPMの公式ガイドを参照してくださいdocs.npmjs.com/...
Dzhuneyt

回答:


486

ファイルのアクセス許可を変更します..このように

まず、ディレクトリの所有者を確認します

ls -la /usr/local/lib/node_modules

node_moduleフォルダーはrootが所有しているため、アクセスを拒否しています

drwxr-xr-x   3 root    wheel  102 Jun 24 23:24 node_modules

rootをユーザーに変更してこれを変更する必要がありますが、まず以下のコマンドを実行して現在のユーザーを確認してください 。OSXのコマンドラインからアクティブユーザーの名前を取得するにはどうすればよいですか。

id -un

または

whoami

次に所有者を変更します

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules

または

sudo chown -R ownerName: /usr/local/lib/node_modules

または

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

3
コマンドにsudoを追加しても機能しない場合がありました。これは私にとってはうまくいき、受け入れられるべき答えです。
Niroj Shr

1
私の会社ではMicrosoft Active Directoryシングルサインオンを使用しています。そのため、グループ名にはスラッシュとスペースが含まれています。これはこれを行うのを少し難しくします。私が使ったコマンドはでしたsudo chown -R myuser:Company\\Domain\ Users /usr/local/lib/node_modules。私が行ったグループ名を正しくリストするためにid -gn myuser
Patrick

44
これは参考になりましたが、私は、コマンドを実行したときに私が得た所有者を変更しますillegal group name。だから私はにコマンドを変更しsudo chown -R ownerName: /usr/local/lib/node_modules、それが機能しました。
Midori

4
それは正しい答えですが、私はこの問題に何度も遭遇しており、より良い解決策はnvmを使用することです。これにより、を使用してファイルの所有者を変更する必要がなくなりますchowngithub.com/nvm-sh/nvm
Roee

1
許可を唱える代わりに、ドキュメントでnvmを使用してnpmをインストールすることをお勧めします。stackoverflow.com/a/59575266/2311074を
Adam

105

権限エラーの可能性を最小限に抑えるために、別のディレクトリを使用するようにnpmを構成できます。この例では、ホームディレクトリに隠しディレクトリを作成して使用します。

コンピュータをバックアップします。コマンドラインのホームディレクトリに、グローバルインストール用のディレクトリを作成します。

mkdir ~/.npm-global

新しいディレクトリパスを使用するようにnpmを構成します。

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

お好みのテキストエディタで、

~/.profile

ファイルを作成し、次の行を追加します。

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

コマンドラインで、システム変数を更新します。

source ~/.profile

新しい構成をテストするには、sudoを使用せずにパッケージをグローバルにインストールします


18
これは私の意見では最も破壊的なオプションではありません。npmウェブサイトで推奨されています
17xande

あるいは、実行したくないnpm config set prefix場合(特に非rootインストーラーを作成している場合)は、PREFIXenv var をオーバーライドするか、--prefixオプションを提供することができます。どちらもと同等npm config set prefixです。(どちらがどれを上書きするかわからない)
SOFe

これは完璧に機能しました。私の意見では、この回答は破壊的エラーの余地が最も少なく、理解と実装が非常に簡単です。
クロック楕円形

1
これが探していたものです!ありがとう。
djangodude

これは実際に推奨されるソリューションであり、長期的には最良のソリューションです。
Al-Mothafar

49

あなたがする必要があるのは/ local / libの所有者にUSERを追加することだけです

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

7
今後の読者が権限を理解できない場合は、公式ドキュメントNPMドキュメントを参照して、問題を適切に修正してください。docs.npmjs.com/…。具体的には、将来の読者はおそらくノードバージョンマネージャを使用してnpmを再インストールする
ordonezalex

1
これは非常に簡単です。また、libの内容について再び心配する必要がないことも意味します。/ usr / local / libを所有している。
Obinna Nnenanya

4
これはまったく良い解決策ではありません。上で実行chownすると、ファイルシステム全体の権限構造を破壊するリスクが高くなります。
Lars

3
このコマンドは私の許可をすべて台無しにしました。すべてのものを再び回復する必要があります。
Azam Alvi

4
正確には、これは所有者の追加ではありません。これは所有者を変更 します。これは単にを追加するよりもはるかに破壊的であり、とほぼ同じくらい破壊的sudo chmod -R 777 /です。
SOFe

29

試行しているコマンドの前にsudoを追加してみてください。

このように:sudo npm install

Linux / UNIXのコマンドでsudoを使用すると、通常、権限がスーパーユーザーレベルに引き上げられます。Windowsでは、スーパーユーザーアカウントは通常「管理者」と呼ばれます。Linux / Unixでは、スーパーユーザーアカウントの名前は通常「root」です。

rootユーザーは、コンピューター上のほとんどすべてのファイルにアクセス、変更、または削除する権限を持っています。通常のユーザーアカウントは、より少ないファイルにアクセス、変更、または削除できます。通常のアカウントの制限は、不正または有害なプログラムまたはユーザーからコンピューターを保護します。一部のプロセスでは、通常アクセスする権限のないファイルまたはフォルダーに対してアクションを実行する必要があります。誰もがアクセスできるプログラムのインストールは、これらのアクションの1つです。

あなたの場合、sudoでインストールコマンドを実行すると、スーパーユーザーの権限が与えられ、通常のユーザーが変更する権限を持っていないファイルを変更することができます。


57
npmパッケージのインストール中にsudoを使用しないでください。このような道を進むにつれて、後で修正するのが難しくなります。別の答えで指摘されているように、権限をnpmフォルダーに変更するだけで、より良い生活を送ることができます。
Lukas Liesis、2018年

2
それはうまくいくかもしれませんが、時間の経過とともに継続的な問題を引き起こします。あらゆる種類の許可拒否エラーを取得したくない場合は、これを回避してください。npmキャッシュフォルダーと同様に、インストールも拒否されます。
Lukas Liesis

1
ユーザーが権限を理解していない場合、パッケージのインストールが非常に危険な前例を設定する前に、sudoを使用するため、この回答は削除する必要があります。コアノードの場所の所有権を一度変更する最初の回答を参照してください。
SeaWarrior404

19

@okandaの答えを試してみましたが、うまくいきませんでした。

しかし、このスレッドで言及されているようないくつかのフォルダーに対してそれを行ったとき、それは完全に機能しました:https//github.com/angular/angular-cli/issues/9676#issuecomment-464857493

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

おかげで、この答えは私に役立ちました。Ubuntu 18.04.3
bakhti_UZB

以前は他のソリューションを機能させていましたが、何らかの理由で、今回はこれらすべてをフォルダーまで機能させる必要がありました。ありがとう。Mac v 10.15.2
Amir5000

1
本番サーバーで実行しても安全ですか?
Cheezey、

16

ubuntuにグローバルパッケージをインストールするときは、usr/binフォルダーに書き込むときに特別な書き込み権限が必要です。セキュリティ上の理由からです。したがって、グローバルパッケージをインストールするたびに、以下を使用します。

sudo npm install -g [package-name]

あなたの特定のケースでは、それは:

sudo npm install -g typescript

14

権限の問題が発生しているようです。インストールしている場合、パッケージをグローバルにインストールしようとするとエラーが発生するnpm-packages可能性がありますEACCES。これは、npmグローバルパッケージとコマンドを格納するために使用するディレクトリに書き込む権限がないことを意味します。

コマンドを実行してみてください:sudo chmod u+x -R 775 ~/.npm及びsudo chown $USER -R ~/.npmまたはあなただけの任意の実行可能npmとコマンドsudoあなたの問題を解決し得るべきです。

npm-packageローカルにインストールする場合は、ローカルのプロジェクトディレクトリにいる必要があり、sudo npm install <pkg-name>コマンドを実行して必要なパッケージをインストールできます。使用の目的はsudo、所有者の権限を変更して、現在のユーザーにnpmコマンドの実行を許可できるようにすることです。

https://docs.npmjs.com/getting-started/fixing-npm-permissionsをご覧になることをお勧めします


10

反応エキスポをインストールしようとしていましたが、sudoとは別に--unsafe-permを追加する必要がありました

このような。これは私の問題を解決します

sudo npm install -g expo-cli --unsafe-perm

@Furquan、ありがとうございました...さまざまな解決策を試した後、私にとってはうまくいきました。
AzeTech

@AzeTech、私はそれが助けてくれて嬉しいです:D
フルクアン

9

Macでこの問題に直面している場合。次の手順を実行します

最初に以下のコマンドを使用して、このファイルの所有者を確認します

ls -la /usr/local/lib/node_modules

以下のようなファイルが見つかります

drwxr-xr-x   3 root    wheel  768 May 29 02:21 node_modules

上記のファイルがrootによって所有されていることに気づいたでしょうか。パスの所有者の船を変更する必要があるために内部で変更を加えるためです。

このコマンドで現在のユーザーを確認できます

id -un (in my case user is yamsol)

次に、このコマンドを呼び出すことで変更できます(ユーザー名をownerNameに置き換えるだけです)

sudo chown -R ownerName: /usr/local/lib/node_modules

私の場合、ユーザーが「yamsol」であることを知っているので、この方法でこのコマンドを呼び出します

sudo chown -R yamsol: /usr/local/lib/node_modules

それでおしまい。



8

npmは、ノードバージョンマネージャーまたはノードインストーラーを使用してインストールできます。ではドキュメントは次のように述べました。

ノードインストーラーを使用することはお勧めしません。ノードインストールプロセスでは、ローカル権限を持つディレクトリにnpmがインストールされ、npmパッケージをグローバルに実行すると権限エラーが発生する可能性があるためです。

権限エラーがあるため、おそらくノードインストーラーを介してnpmをインストールし、nvm(ノードバージョンマネージャー)で再インストールする必要があります。

幸い、これは非常に簡単です。npmやNode.jsの現在のバージョンを削除する必要すらありません。

あなたがする必要があるのは

  1. nvmをインストールします。OSXまたはLinuxノードの場合:

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

    これにより、ホームディレクトリにnvmフォルダが作成されます。

その後

  1. nvmを介してnpmとnode.jsをインストールします。これを行うには、電話するだけです

    nvm install stable

これsudonode_modulesusrフォルダー内の所有者を使用または変更せずに、パッケージをグローバルにインストールできます。


答えをありがとうアダム!ビルド/環境のセットアッププロセスの後半で起こりうる複雑さは何だろうと思っているだけですか?
吖奇说-何魏奇Archy Will He

また、fishnvmが適切に機能するために、詳しく説明するために、nvmには魚ラッパーが必要ですgithub.com/FabioAntunes/fish-nvm
吖奇说-何魏奇Archy Will He

@吖奇说ARCHYSHUōnvmでノードをインストールするときに問題が発生することは聞いたことがありません。そして、それは公式のドキュメントから推奨されているので、それは私に行く最良の方法のように見えます:)
Adam

7

次のコマンドを使用して、sudoユーザーとしてインストールnpm します。

sudo npm install -g create-react-app 

npm install -g create-react-a ppの代わりに


npmパッケージのインストール中にsudoを使用して@ Lukas-を引用します。このような道を進むにつれて、後で修正するのが難しくなります。別の答えで指摘されているように、権限をnpmフォルダーに変更するだけで、より良い生活を送ることができます。
सत्यमेवजयते

6

Macで以下を使用して問題を解決できました。

sudo npm install -g @aws-amplify/cli --unsafe-perm=true

6

nvmユーザーの場合

sudo chown -R $USER /home/bereket/.nvm/versions/node/v8.9.1/lib/node_modules 

そして

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

使用v8.9.1しているノードのバージョンに置き換えます。


これは私にはうまくいきませんでした!それでもエラーが発生する:npm ERR!エラー:EACCES:権限が拒否されました/name/samuel/.nvm/versions/node/v8.10.0/lib/node_modules/.staging/npm-90fab7c7/node_modules/columnify/node_modules/wcwidth/node_modules/defaultsの名前が変更されているようです/.staging ..thatフォルダーを持つものは、インストールの試行後に存在しません。それを手伝ってくれませんか?
サミュエル

@Samuelはこのコマンドを実行しましたか?sudo chown -R $USER home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules
bereket gebredingle

5

次のように、ローカルではなくグローバルにnpmパッケージをインストールしようとしたようですman npm install

-g または --global引数は、グローバルではなくローカルにパッケージをインストールするためにNPMが発生します。

一般に、npmプロジェクトをセットアップする場合(他にも多数ありますが)、デバッグログとしてNode.jsグローバルモジュール(/ usr / local / lib / node_modules)にパッケージをインストールすることはお勧めできません。提案した。

を使用する代わりにを-g使用する--saveと、パッケージがpackage.jsonファイルの依存関係として自動的に保存されます。

このような:

$ npm install express-generator --save

$ cat package.json 
{
  "name": "first_app_generator",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
},
  "author": "ivanleoncz",
  "license": "MIT",
  "dependencies": {
    "express-generator": "^4.16.0"
  }
}

他の回答が述べたようにしかし、あなたが使用するつもりなら、-gあなたが使用する必要がありますsudo:の/ etc / sudoersファイルを参照してくださいあなたのユーザーがsudo権限を持っている場合は実行時に)npm install express-generator -g、しかし確かに、それはパーミッションの問題は、おそらく原因、良いアイデアではありません。

通知

そこインストールする方法について説明しているexpress-generatorとの-gオプションは、スクリプト持たせるために、express-cli.jsシステムパスで利用可能に、しかし、あなたは同様にローカルにインストールスクリプトを使用することができ、にあるnode_modules場合は、あなたのNPMプロジェクト:

$ ./node_modules/express-generator/bin/express-cli.js --view=pug myapp

/ usr / bin / env: 'node'のようなメッセージが表示された場合、そのようなファイルまたはディレクトリは表示されません。インストールnodejs-legacy(Debian / Ubuntu)

結果がわからない場合、私見、使用-g(も使用sudo)はhic sunt draconesに似ています。

詳細については:


4

これは、ローカルでnpmグローバルnode_modulesディレクトリにアクセスできないために発生しました。

sudo chown -R Name: /usr/local/lib/node_modules

例えば

sudo chown -R developerayo: /usr/local/lib/node_modules

問題が修正され、再度実行したコマンドを実行できるようになりました。


3

このようにコマンドを実行する前に、所有者を変更するか、単にsudoを使用するだけです。

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules所有者を変更

または

sudo npm install -g json-server

それでおしまい。


3

Linux / ubuntuの場合、コマンド

npm install -g <package_name>

npm WARN deprecated superagent@4.1.0: Please note that v5.0.1+ of superagent removes User-Agent header by default, therefore you may need to add it yourself (e.g. GitHub blocks requests without a User-Agent header).  This notice will go away with v5.0.2+ once it is released.

npm ERR! path ../lib/node_modules/<package_name>/bin/..

npm ERR! code EACCES

npm ERR! errno -13

npm ERR! syscall symlink

npm ERR! Error: EACCES: permission denied, symlink '../lib/node_modules
/<package_name>/bin/..' -> '/usr/local/bin/<package_name>'

npm ERR!  { [Error: EACCES: permission denied, symlink '../lib/node_modules/<package_name>/bin/..' -> '/usr/local/bin/<package_name>']

npm ERR!   cause:
npm ERR!    { Error: EACCES: permission denied, symlink '../lib/node_modules/<package_name>/bin/..' -> '/usr/local/bin/<package_name>'

npm ERR!      errno: -13,

npm ERR!      code: 'EACCES',

npm ERR!      syscall: 'symlink',

npm ERR!      path: '../lib/node_modules/<package_name>/bin/..',
npm ERR!      dest: '/usr/local/bin/ionic' },

npm ERR!   stack:
npm ERR!    'Error: EACCES: permission denied, symlink \'../lib/node_modules/ionic/bin/ionic\' -> \'/usr/local/bin/ionic\'',

npm ERR!   errno: -13,

npm ERR!   code: 'EACCES',

npm ERR!   syscall: 'symlink',

npm ERR!   path: '../lib/node_modules/<package-name>/bin/<package-name>',

npm ERR!   dest: '/usr/local/bin/<package-name>' }

npm ERR! 

npm ERR! The operation was rejected by your operating system.

npm ERR! It is likely you do not have the permissions to access this file as the current user

npm ERR! 

npm ERR! If you believe this might be a permissions issue, please double-check the

npm ERR! permissions of the file and its containing directories, or try running

npm ERR! the command again as root/Administrator (though this is not recommended).


npm ERR! A complete log of this run can be found in:

npm ERR!     /home/User/.npm/_logs/2019-07-29T01_20_10_566Z-debug.log

修正:ルート権限でインストール

sudo npm install <package_name> -g


3

Reactをインストールするには、スーパーユーザーレベルの権限が必要です。Linux / Unixでは、スーパーユーザーアカウントの名前は通常「root」です。

スーパーユーザー権限を取得するには、端末で次のコマンドを実行します。

sudo -i

次に、コマンドを実行してReactをインストールします。

npm install -g create-react-app

ただし、reactjsチームは、グローバルパッケージをインストールする代わりに、次のコマンドを使用することを推奨しています。

npx create-react-app app_name

1
sudoの使用は危険な提案です。一部のパッケージは安全である可能性がありますが、他のパッケージは他のことを実行して、付与しているroot権限を利用します。sudoは後続のコマンドをスーパーユーザーとして実行します
rustyDev

などの一部のパッケージはcreate-react-app、グローバルパッケージとしてインストールするためにroot権限が必要です。そうしないと、インストールできません。ただし、reactjsチームはnpx create-react-app app_name、グローバルパッケージをインストールする代わりに、次のコマンドを使用することを推奨しています。
Fatema T. Zuhora



2

長い調査の結果、Mac OSが角度cliをインストールするために必要なものは何もないことを理解しましたsudo npm install -g @angular/cli。ターミナルを使用するだけで、パスワードの入力を求められますcliのインストールに進みます。それは私のために働いた。



2

Linux(つまり:Arch)を実行している場合

# npm -g install packageName

デフォルトでは、このコマンドは/ usr / lib / node_modules / npmの下にパッケージをインストールし、そのためにはroot権限が必要です。

ユーザー全体のインストールを許可するには

現在のユーザーにグローバルパッケージのインストールを許可するには、npm_config_prefix環境変数を設定します。これはnpmとyarnの両方で使用されます。

~/.profile
PATH="$HOME/.node_modules/bin:$PATH"
export npm_config_prefix=~/.node_modules

再ログインまたはソースから変更を更新します。

--prefixパラメータを指定することもできますnpm install。ただし、グローバルパッケージをインストールするたびに追加する必要があるため、これはお勧めできません。

$ npm -g install packageName --prefix ~/.node_modules

したがって、フォルダの権限を変更する必要はありません。


1

をインストールしてnvmからノードを最新バージョンに設定することで、この問題を取り除くことができました。

  1. nvm使用してインストールcurl(最新バージョンの場合はnvm.shに移動
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
  1. 利用可能なノードバージョンの一覧表示
nvm ls

v10.12.0
デフォルト-> v10.12(-> v10.12.0)
ノード->安定(-> v10.12.0)(デフォルト)
安定-> 10.12(-> v10.12.0)

  1. 使用するノードのバージョンを選択してください
nvm use v10.12

nvmはnpm config "prefix"オプションと互換性がありません:現在 ""に設定されています

  1. これを実行してオプションの設定を解除します。
nvm use --delete-prefix v10.12.0

上記のコマンドを実行すると、Ubuntuにreact / angularをインストールできるようになります。




0

私はsudoを使用しましたが、問題は解決しませんでした。node_modulesフォルダーの権限を変更して問題を修正しました。

sudo chmod -R 777 node_modules

すべてのユーザー/グループに権限を設定しない場合は、必要に応じて777を他のコードに置き換えることができます。


0

上記の解決策を使用しても問題を解決できない場合は、これを試して

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

これでうまくいくはずです、乾杯!

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