Erreur: EACCES: autorisation refusée, l'accès '/ usr / local / lib / node_modules' réagit

298

Quelle pourrait être la cause de l'erreur 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
hendra dedi
la source
9
Voir le guide officiel de NPM sur la façon de résoudre ce problème: docs.npmjs.com/…
Dzhuneyt

Réponses:

487

changer vos permissions de fichier .. comme ça

vérifiez d'abord à qui appartient le répertoire

ls -la /usr/local/lib/node_modules

il refuse l'accès car le dossier node_module appartient à root

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

donc cela doit être changé en changeant root pour votre utilisateur mais exécutez d'abord la commande ci-dessous pour vérifier votre utilisateur actuel Comment puis-je obtenir le nom de l'utilisateur actif via la ligne de commande dans OS X?

id -un

OU

whoami

puis changer de propriétaire

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

OU

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

OU

sudo chown -R $USER /usr/local/lib/node_modules
Okandas
la source
3
Il y a eu des cas où l'ajout de sudo dans la commande n'a pas fonctionné non plus. Cela a fonctionné pour moi et devrait être accepté comme réponse.
Niroj Shr
1
Mon entreprise utilise l'authentification unique Microsoft Active Directory. Le nom du groupe contient donc des barres obliques et un espace. Ce qui rend cela un peu plus difficile à faire. La commande que j'ai utilisée était sudo chown -R myuser:Company\\Domain\ Users /usr/local/lib/node_modules. Pour lister correctement le nom du groupe que j'ai fait id -gn myuser.
Patrick
44
Cela a été utile mais lorsque j'ai exécuté la commande pour changer le propriétaire que j'ai obtenu illegal group name. J'ai donc changé la commande en sudo chown -R ownerName: /usr/local/lib/node_moduleset cela a fonctionné.
Midori
4
Bien que ce soit la bonne réponse, j'ai rencontré ce problème plusieurs fois et la meilleure solution consiste à utiliser nvm. de cette façon, vous n'aurez pas besoin de changer le propriétaire des fichiers en utilisant chown. github.com/nvm-sh/nvm
Roee
1
Au lieu de modifier l'autorisation, il est recommandé dans la documentation d'installer npm avec nvm. Voir stackoverflow.com/a/59575266/2311074
Adam
105

Pour minimiser le risque d'erreurs d'autorisation, vous pouvez configurer npm pour utiliser un répertoire différent. Dans cet exemple, vous allez créer et utiliser un répertoire caché dans votre répertoire personnel.

Faites des sauvegardes de votre ordinateur. Sur la ligne de commande, dans votre répertoire personnel, créez un répertoire pour les installations globales:

mkdir ~/.npm-global

Configurez npm pour utiliser le nouveau chemin de répertoire:

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

Dans votre éditeur de texte préféré, ouvrez ou créez un

~/.profile

fichier et ajoutez cette ligne:

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

Sur la ligne de commande, mettez à jour vos variables système:

source ~/.profile

Pour tester votre nouvelle configuration, installez un package globalement sans utiliser sudo

Naveen Raju
la source
18
C'est à mon avis l'option la moins destructrice. Il est également recommandé sur le site Web de npm .
17xande le
Alternativement, si vous ne voulez pas le faire npm config set prefix(en particulier si vous écrivez un programme d'installation non root), vous voudrez peut-être remplacer la PREFIXvariable env ou fournir l' --prefixoption, les deux équivalentes à npm config set prefix. (
je
Cela a parfaitement fonctionné pour moi. À mon avis, cette réponse fait le moins de place aux erreurs destructrices et est très simple à comprendre et à mettre en œuvre.
Clockelliptic
1
C'est ce que l'on cherchait! Merci.
djangodude
C'est la solution recommandée en fait, et la meilleure à long terme.
Al-Mothafar
49

Tout ce que vous devez faire est d'ajouter USER au propriétaire de / local / lib

sudo chown -R $USER /usr/local/lib
Nizar
la source
7
Si les futurs lecteurs ne comprennent pas les autorisations, veuillez vous reporter à la documentation officielle de la documentation NPM et résoudre correctement le problème. docs.npmjs.com/… . Plus précisément, les futurs lecteurs devraient probablement réinstaller npm avec un gestionnaire de version de nœud (recommandé)
ordonezalex
1
C'est assez simple. Cela signifie également que vous n'aurez plus jamais à vous soucier de quoi que ce soit dans lib; vous possédez / usr / local / lib.
Obinna Nnenanya
4
Ce n'est pas du tout une bonne solution. En exécutant ci-dessus, chownvous courez un risque élevé de détruire la structure d'autorisation de l'ensemble de votre système de fichiers.
Lars
3
Cette commande a ruiné toutes mes autorisations. Besoin de récupérer à nouveau toutes les choses.
Azam Alvi
4
Pour être précis, cela n'ajoute pas de propriétaire. Cela change le propriétaire, ce qui est beaucoup plus destructeur que de simplement ajouter , et est presque aussi destructeur que sudo chmod -R 777 /.
SOFe
29

essayez d'ajouter sudo avant la commande que vous essayez.

comme ceci: sudo npm install

L'utilisation de sudo avec une commande sous Linux / UNIX élève généralement vos autorisations aux niveaux de superutilisateur. Sous Windows, le compte superutilisateur est généralement appelé «Administrateur». Sous Linux / Unix, le compte superutilisateur est généralement nommé «root».

L'utilisateur root est autorisé à accéder, modifier ou supprimer presque tous les fichiers de votre ordinateur. Les comptes d'utilisateurs normaux peuvent accéder, modifier ou supprimer beaucoup moins de fichiers. Les restrictions sur un compte normal protègent votre ordinateur contre les programmes ou utilisateurs non autorisés ou nuisibles. Certains processus nécessitent que vous exécutiez des actions sur des fichiers ou des dossiers auxquels vous n'avez normalement pas accès. L'installation d'un programme accessible à tous est l'une de ces actions.

Dans votre cas, l'exécution de la commande d'installation avec sudo vous donne les autorisations du superutilisateur et vous permet de modifier des fichiers que votre utilisateur normal n'a pas l'autorisation de modifier.

Pradeep Kumar HK
la source
57
évitez d'utiliser sudo lors de l'installation des packages npm. Plus vous allez en profondeur avec un tel chemin, plus il sera difficile de le réparer par la suite. Modifiez simplement les autorisations dans le dossier npm comme indiqué dans une autre réponse et vivez une vie meilleure.
Lukas Liesis
2
Cela peut fonctionner, mais cela causera des problèmes continus au fil du temps. Évitez cela si vous ne souhaitez pas obtenir toutes sortes d'erreurs d'autorisation refusée. Comme refusé dans le dossier de cache npm, refusé d'installer, etc.
Lukas Liesis
1
Cette réponse doit être supprimée car l'utilisation de sudo avant l'installation de packages crée un précédent très dangereux si l'utilisateur ne comprend pas les autorisations. Veuillez vous référer à la première réponse dans laquelle vous changez une fois la propriété de l'emplacement du nœud principal.
SeaWarrior404
19

J'ai essayé la solution de la réponse donnée par @okanda mais cela n'a pas fonctionné pour moi.

Cependant, cela a fonctionné parfaitement lorsque je l'ai fait pour plusieurs dossiers comme mentionné dans ce fil: 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/
Quentin
la source
Merci, cette réponse m'a aidé. Ubuntu 18.04.3
bakhti_UZB
J'ai eu d'autres solutions avant, mais pour une raison quelconque, cette fois, il a fallu toutes ces solutions pour travailler dans des dossiers. Merci. Mac v 10.15.2
Amir5000
1
Est-il sûr de fonctionner sur le serveur de production?
Cheezey
16

Lors de l'installation de packages globaux dans ubuntu , vous avez besoin d'autorisations d'écriture spéciales lorsque vous écrivez dans le usr/bindossier. C'est pour des raisons de sécurité. Ainsi, chaque fois que vous installez un package global, utilisez:

sudo npm install -g [package-name]

Pour votre cas spécifique, ce sera:

sudo npm install -g typescript
cinobili19
la source
14

Il semble que vous rencontriez des problèmes d'autorisation. Si vous installez, npm-packagesil est possible que vous obteniez une EACCESerreur lorsque vous essayez d'installer un package globalement. Cela signifie que vous n'êtes pas autorisé à écrire dans les répertoires npmutilisés pour stocker les packages et commandes globaux.

Essayez d'exécuter des commandes: sudo chmod u+x -R 775 ~/.npmet sudo chown $USER -R ~/.npmou vous pouvez simplement exécuter n'importe quelle npmcommande avec sudo, cela devrait résoudre votre problème.

Si vous installez npm-packagelocalement, vous devez être dans votre répertoire de projet local et essayer d'exécuter la sudo npm install <pkg-name>commande pour installer le package requis. le but de l'utilisation sudoest de modifier vos autorisations de propriétaire afin que vous puissiez autoriser votre utilisateur actuel à exécuter des npmcommandes.

Je vous recommande de jeter un œil à https://docs.npmjs.com/getting-started/fixing-npm-permissions

Suhas Gavad
la source
10

J'essayais d'installer Reaper Expo et à part Sudo, j'ai dû ajouter --unsafe-perm

comme ça. Cela résout mon problème

sudo npm install -g expo-cli --unsafe-perm
Furquan
la source
@Furquan, Merci beaucoup ... Cela a fonctionné pour moi après avoir essayé différentes solutions.
AzeTech
@AzeTech, je suis heureux que cela ait aidé: D
Furquan
9

Si vous rencontrez ce problème sur votre Mac. Suivez ces étapes

Vérifiez d'abord qui est le propriétaire de ce fichier en utilisant la commande ci-dessous

ls -la /usr/local/lib/node_modules

vous trouverez un fichier comme ci-dessous l'un d'eux est ci-dessous

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

avez-vous remarqué que le fichier ci-dessus est propriétaire de la racine, pour apporter des modifications à l'intérieur, vous devez changer le propriétaire du chemin.

vous pouvez utiliser vérifier qui est l'utilisateur actuel par cette commande

id -un (in my case user is yamsol)

puis vous pouvez changer en appelant cette commande (remplacez simplement votre nom d'utilisateur par ownerName)

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

dans mon cas, comme vous le savez, l'utilisateur est "yamsol", je vais appeler cette commande de cette façon

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

c'est tout.

adnan javed
la source
8

Soyez prudent avec toutes les réponses qui changent le propriétaire de tous les répertoires sous / usr / local Fondamentalement, ne salissez pas le système Linux !!!

Je pense que la meilleure façon est d'utiliser votre propre dossier pour localiser tous les packages globaux: https://www.competa.com/blog/how-to-run-npm-without-sudo/

angelcervera
la source
8

Vous pouvez installer npm via le gestionnaire de version de Node ou un programme d'installation de Node. Dans les documents, il a déclaré:

Nous ne recommandons pas d'utiliser un programme d'installation de Node, car le processus d'installation de Node installe npm dans un répertoire avec des autorisations locales et peut provoquer des erreurs d'autorisations lorsque vous exécutez des packages npm globalement.

Puisque vous avez le erreur d'autorisation , vous avez probablement installé npm via un programme d'installation de nœud et vous devez maintenant le réinstaller avec un nvm (gestionnaire de version de nœud).

Heureusement, c'est très simple. Vous n'avez même pas besoin de supprimer votre version actuelle de npm ou Node.js.

Tout ce que vous devez faire c'est

  1. Installez nvm. Pour une utilisation avec OSX ou Linux Node:

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

    Cela crée un dossier nvm dans votre répertoire personnel.

ensuite

  1. Installez npm et node.js via nvm. Pour ce faire, il suffit d'appeler

    nvm install stable

Vous pouvez maintenant installer votre package globalement sans utiliser sudoni changer le propriétaire du dossier node_modulesin usr.

Adam
la source
merci pour la réponse Adam! vous vous demandez simplement quelles pourraient être les complications possibles plus tard dans le processus de configuration de l'environnement / build?
吖 奇 说 - 何魏奇 Archy Will He
aussi pour élaborer, pour les gens sur fish, afin de fonctionner correctement nvm a besoin d'un fish-wrapper github.com/FabioAntunes/fish-nvm
吖 奇 说 - 何魏奇 Archy Will He
@ 吖 奇 说 ARCHYSHUō Je n'ai jamais entendu parler de complications lors de l'installation de node avec nvm. Et comme il est recommandé par les documents officiels, il me semble que la meilleure façon de procéder :)
Adam
7

Utilisez cette commande pour installer en npm tant qu'utilisateur sudo:

sudo npm install -g create-react-app 

au lieu de npm install -g create-react-a pp.

Nimmi Verma
la source
citant @ Lukas - en utilisant sudo lors de l'installation des packages npm. Plus vous allez en profondeur avec un tel chemin, plus il sera difficile de le réparer par la suite. Modifiez simplement les autorisations dans le dossier npm comme indiqué dans une autre réponse et vivez une vie meilleure.
1 जयते
6

J'ai pu résoudre le problème en utilisant ce qui suit dans mac.

sudo npm install -g @aws-amplify/cli --unsafe-perm=true
posha
la source
6

Pour les utilisateurs NVM

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

et

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

remplacez v8.9.1par la version de votre nœud que vous utilisez.

bereket gebredingle
la source
Cela ne fonctionne pas pour moi! Toujours l'erreur: npm ERR! Erreur: EACCES: autorisation refusée, renommer /home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules/.staging/npm-90fab7c7/node_modules/columnify/node_modules/wcwidth/node_modules/defaults Il semble être quelque chose avec /.staging .. ce dossier n'existe pas après la tentative d'installation. Pouvez-vous m'aider?
Samuel
@Samuel avez-vous exécuté cette commande? sudo chown -R $USER home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules
bereket gebredingle
5

Il semble que vous ayez essayé d'installer un package npm globalement plutôt que localement, comme man npm installdécrit ci - dessous:

L' argument -g ou --global obligera npm à installer le package globalement plutôt que localement.

Généralement, lorsque vous configurez un projet npm (parmi beaucoup d'autres que vous pourriez avoir), ce n'est pas une bonne idée d'installer des packages sur les modules globaux Node.js (/ usr / local / lib / node_modules), comme votre journal de débogage. suggéré.

Au lieu d'utiliser -g, utilisez --save, qui enregistrera automatiquement le package en tant que dépendance pour votre package.jsonfichier:

Comme ça:

$ 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"
  }
}

Mais comme les autres réponses mentionnées, si vous allez utiliser -g, vous devez utiliser sudo( si votre utilisateur dispose des privilèges sudo: voir / etc / sudoers ) lors de l'exécution npm install express-generator -g, mais en effet, ce n'est pas une bonne idée, ce qui peut entraîner des problèmes d'autorisation.

REMARQUER

Il y a des instructions pour l'installation express-generatoravec -goption, afin d'avoir le script express-cli.jsdisponible sur le chemin du système, mais vous pouvez également utiliser le script installé localement, situé sur le node_modulessi votre projet npm:

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

Si un message comme / usr / bin / env: 'node': Aucun fichier ou répertoire de ce type n'apparaît, installez nodejs-legacy(Debian / Ubuntu)

À mon humble avis, utiliser -g(également utiliser sudo) est comme des dracones hic sunt , si vous n'êtes pas sûr des conséquences.

Pour plus d'informations:

ivanleoncz
la source
4

Cela s'est produit en raison de l' npmimpossibilité d'accéder node_moduleslocalement à votre répertoire global , en exécutant

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

par exemple

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

résout le problème, vous pouvez maintenant exécuter à nouveau la commande que vous avez exécutée.

Shodipo Ayomide
la source
3

Vous pouvez simplement changer de propriétaire ou simplement utiliser sudo avant de commander comme ceci

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules( changer de propriétaire )

ou

sudo npm install -g json-server

c'est tout.

Shahid jafrey
la source
3

Pour linux / ubuntu si la commande

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

Correction: installez avec les autorisations root

sudo npm install <package_name> -g

Srilakshmy Krishnan
la source
3

Vous avez besoin de l'autorisation des niveaux de superutilisateur pour installer React. Sous Linux / Unix, le compte superutilisateur est généralement nommé «root».

Pour obtenir le privilège de superutilisateur, exécutez simplement la commande suivante sur votre terminal:

sudo -i

puis exécutez simplement la commande pour installer React:

npm install -g create-react-app

Cependant, l'équipe reactjs nous encourage à utiliser la commande suivante au lieu d'installer un package global.

npx create-react-app app_name
Fatema T. Zuhora
la source
1
L'utilisation de sudo est une proposition risquée, certains packages peuvent être sûrs mais d'autres peuvent partir pour faire autre chose et profiter des privilèges root que vous accordez. sudo exécute les commandes suivantes en tant que superutilisateur
rustyDev
Certains packages tels create-react-appque les privilèges root doivent être installés en tant que packages globaux; sinon, vous ne pourrez pas l'installer. Cependant, l'équipe reactjs nous encourage à utiliser la commande suivante npx create-react-app app_nameau lieu d'installer un package global.
Fatema T. Zuhora
3

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

joe cutter
la source
2

A aidé seulement ceci:

sudo chown -R ownerName: /usr/local/lib/node_modules
nicolas asinovich
la source
2

Après de longues recherches, j'ai compris que rien n'est requis pour que Mac OS installe le cli angulaire. Utilisez simplement sudo npm install -g @angular/clivotre terminal. Ça a marché pour moi.

Hemanth Paluri
la source
2

Si vous utilisez Linux (par exemple: Arch)

# npm -g install packageName

Par défaut, cette commande installe le package sous / usr / lib / node_modules / npm et requiert les privilèges root pour ce faire.

Pour autoriser des installations à l'échelle de l'utilisateur

Pour autoriser les installations globales de packages pour l'utilisateur actuel, définissez la npm_config_prefixvariable d'environnement. Ceci est utilisé à la fois par npm et par fil.

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

Reconnectez-vous ou source pour mettre à jour les modifications.

Vous pouvez également spécifier le --prefixparamètre pour npm install. Cependant, ce n'est pas recommandé, car vous devrez l'ajouter à chaque fois que vous installez un package global.

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

Vous n'avez donc pas besoin de visualiser la permission du dossier

Duy Huy Hoang Do
la source
1

J'ai pu me débarrasser de ce problème en installant nvm, puis en définissant le nœud sur la dernière version.

  1. Installer en nvmutilisant curl(pour la dernière version, allez sur nvm.sh )
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
  1. Liste des versions de nœuds disponibles
nvm ls

v10.12.0
par défaut -> v10.12 (-> v10.12.0)
nœud -> stable (-> v10.12.0) (par défaut)
stable -> 10.12 (-> v10.12.0)

  1. Choisissez la version du nœud à utiliser
nvm use v10.12

nvm n'est pas compatible avec l'option "prefix" de npm config: actuellement définie sur ""

  1. Exécutez ceci pour désactiver l'option:
nvm use --delete-prefix v10.12.0

Après avoir suivi les commandes ci-dessus, vous pourrez installer react / angular dans Ubuntu.

VishnuB
la source
1

Utilisez 'sudo npm install xyz' cela fonctionnera.

Sohan
la source
1

Ajoutez simplement "sudo" avant la commande npm. C'est tout.

Farrukh Ahmed
la source
0

J'ai utilisé sudo, mais cela n'a pas résolu le problème, j'ai résolu le problème en modifiant l'autorisation du dossier node_modules,

sudo chmod -R 777 node_modules

Si vous le souhaitez, vous pouvez remplacer 777 par tout autre code si vous ne définissez pas l'autorisation pour tous les utilisateurs / groupes.

coder618
la source
0

Pour ceux d'entre vous qui ne peuvent toujours pas résoudre le problème après avoir utilisé les solutions mentionnées ci-dessus. Essaye ça

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

Ça devrait faire l'affaire, bravo!

dPac
la source