Erreur: EACCES: autorisation refusée

98

Je lance npm install lodash mais il jette Erreur: EACCES: permission refusée erreur. Je sais que c'est un problème d'autorisation, mais pour autant que je sache, l'autorisation sudo n'est pas requise pour installer le module de nœud localement. Si je l'exécute avec sudo, il est installé dans le dossier ~ / node_modules. drwxrwxr-x est l'autorisation de fichier du dossier existant. Je ne peux pas comprendre ce qui a pu mal tourner.

Ci-dessous le message d'erreur.

npm ERR! tar.unpack untar error /home/rupesh/.npm/lodash/4.13.1/package.tgz
npm ERR! Linux 3.13.0-88-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "lodash"
npm ERR! node v4.3.1
npm ERR! npm  v2.14.12
npm ERR! path /home/rupesh/node_modules/lodash
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall mkdir

npm ERR! Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash'
npm ERR!     at Error (native)
npm ERR!  { [Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash']
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ '/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:35:25',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:47:53',
npm ERR!      'FSReqWrap.oncomplete (fs.js:82:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/rupesh/Desktop/es6/npm-debug.log
xruptronics
la source
est le propriétaire de la node_modulesracine du dossier ?
AJS
Le dossier node_module n'est pas encore créé dans le dossier dans lequel j'ai l'intention d'installer lodash.
xruptronics
avez-vous exécuté npm install dans votre répertoire / home / rupesh / ou dans un autre répertoire?
AJS
le chemin du dossier dans lequel j'exécute l'installation de npm est ~ / Desktop / es6
xruptronics
quelle est la sortie de ls -l ~/Desktop | grep es6assurez-vous que vous êtes le propriétaire du répertoire es6
AJS

Réponses:

78

Cette commande résout le problème. Cela a fonctionné pour moi:

sudo npm install -g --unsafe-perm=true --allow-root
Saniya syed qureshi
la source
Pour quelqu'un comme moi, bien que cette commande semble avoir fonctionné au moment de la rédaction de cet article, pour Node, v10.10.0j'ai eu l'erreur suivante: "npm ERR! Can't install / var / www / project: Missing package name"
Wayne Smallman
1
Les indicateurs --unsafe-perm = true --allow-root ont fonctionné pour nous en utilisant le nœud v10.15.0 pour installer en tant qu'utilisateur root une application existante où node-sass ne serait pas installé. La commande exacte que nous avons utilisée pour installer node-sass dans le répertoire local du dossier node_modules était # npm install --save-dev --unsafe-perm = true --allow-root node-sass @ latest
Peter Edwards
Vous pouvez utiliser root pour résoudre le problème (bien que ce ne soit pas recommandé).
Chris Marotta
J'ai pu le faire fonctionner en utilisant ces indicateurs, donc vraiment la réponse est: sudo npm install -g --unsafe-perm = true --allow-root <nom-package> @ <nom-version>
Frank Hu MSFT
45

J'ai le même problème avec l'installation du serveur Webpack dans le monde entier, utilisez les étapes de cette URL Résolu mon problème, je travaille pour vous.

Étapes mentionnées ci-dessus Là: Sauvegardez votre ordinateur avant de commencer.

Créez un répertoire pour les installations globales:

1. mkdir ~/.npm-global

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

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

Ouvrez ou créez un fichier ~ / .profile et ajoutez cette ligne:

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

De retour sur la ligne de commande, mettez à jour vos variables système:

4.source ~/.profile

Test: téléchargez un package globalement sans utiliser sudo.

npm install -g jshint

Au lieu des étapes 2 à 4, vous pouvez utiliser la variable ENV correspondante (par exemple si vous ne souhaitez pas modifier ~ / .profile):

NPM_CONFIG_PREFIX=~/.npm-global
Vishal Patel
la source
1
travaillé sur Mojave. Merci beaucoup après 4-5 heures de dépannage, cela a fait l'affaire!
Johnny
11

La création de package.json à l' aide de npm init a résolu mon problème.

xruptronics
la source
Mais je ne sais pas pourquoi le fichier package.json est requis lors de l'installation du module de noeud car le fichier package.json n'est pas mis à jour ou utilisé dans mon cas car je n'ai pas utilisé --save ou --save-dev ou une commande similaire.
xruptronics
c'est bizarre. Je pense que quelque chose a été foiré dans votre conf npm et que l'initialisation a été réinitialisée, de toute façon cela devrait être un mystère pour toujours car je n'ai pas trouvé une seule référence à un problème similaire ailleurs.
AJS
J'ai eu un problème similaire avec npm 6.9.0 et cela a fonctionné pour moi aussi.
Chris Marotta
11

J'ai eu un problème sous Linux. J'ai écrit

chown -R myUserName ./* 

dans mon dossier de projet.

Sergey
la source
6
Très déconseillé. Cela touche tous vos répertoires et supprime les droits root sur l'un d'entre eux. Si certaines choses doivent être définies en tant que root, cela détruit votre configuration actuelle.
Patrick Da Silva
7

D'après ce que je peux voir dans vos journaux que vous avez publiés:

npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_class: 'DirWriter',

Le répertoire /home/rupesh/node_modules/n'a pas les autorisations nécessaires pour créer un répertoire, alors exécutez chown -r rupesh:rupesh /home/rupesh/node_modules/cela devrait le résoudre.

AJS
la source
Faire chown -R rupesh: rupesh / home / rupesh / node_modules / et exécuter npm install lodash à nouveau installé lodash dans le dossier ~ / node_module.Mais cette fois, il ne génère pas d'erreur.Mais ce n'est pas là que j'ai l'intention d'installer.
xruptronics
oui, je sais que vous devez créer le projet dans votre répertoire personnel plutôt que sur le bureau. npm pour une raison quelconque installe vos modules /home/rupesh/node_modulespour une raison quelconque. Toute façon de travailler dans votre répertoire personnel devrait être idéale de toute façon
AJS
Je pense que ~ / Projects / es6 est équivalent à ~ / Desktop / es6 en termes de structure. Ce que j'ai du mal à comprendre, c'est pourquoi node_modules n'est pas créé dans le dossier es6 et pourquoi le module lodash (ou autre) n'est pas installé à l'intérieur. Je n'avais pas fait face à ce problème plus tôt, mais ce qui n'a pas fonctionné aujourd'hui, c'est ce que je veux comprendre.
xruptronics
oui, j'ai lu mes deux commentaires précédents et j'ai réalisé la stupidité :), eh bien j'ai regardé autour de moi et je n'ai trouvé personne d'autre ayant le même problème. Votre code est-il capable de trouver le loadashmodule ?.
AJS
6

Il n'a pas d'autorisations d'écriture pour others(rx). Essayez avec

chmod a+w <folder>

et répétez.

Juanjo Salvador
la source
2
N'a-t-il pas chownune -roption pour éviter d'avoir à l'utiliser sur chaque dossier node_modules?
DrakaSAN
@Juanjo Salvador Cela n'a pas fonctionné, il renvoie la même erreur.
xruptronics
@DrakaSAN ouais, chown a une option récursive.
Juanjo Salvador
6

Cela a résolu mon problème tout de suite - mac Mojave 10.14.6 - PhpStorm.

Erreur de rejet non gérée: EACCES: permission refusée, mkdir '/Users/myname/.npm/_cacache/index-v5/fb/5a'

sudo chown -R $USER:$GROUP ~/.npm
sudo chown -R $USER:$GROUP ~/.config

Message d'origine: https://stackoverflow.com/a/50639828

petit
la source
4

FWIW J'ai eu les mêmes symptômes, mais avec un emballage différent. La création package.jsonet l'exécution npm initn'ont PAS résolu mon problème.

Sur ce système, apparemment de nouveaux dossiers à cet emplacement étaient créés avec des autorisations root. Pendant npm install, de nouveaux dossiers sont créés. Cela a provoqué l'échec de l'installation de npm, même avec sudo.

La solution consistait à exécuter npm install appdans un emplacement différent sans umask racine.

Courtney Schwartz
la source
4

Essayez de donner toutes les autorisations à votre dossier de projet avec la commande ci-dessous

sudo chmod -R 777 /yourProjectDirectoryName

courir avec

sudo npm install lodash
Raj Gohel
la source
C'est une solution jr
Pablo Papalardo
Vous n'avez peut-être même pas besoin de 777. Pour moi, le problème était simplement que les # étaient trop bas. (775 l'a corrigé.)
Andrew le
"La définition des autorisations 777 sur un fichier ou un répertoire signifie qu'il sera lisible, inscriptible et exécutable par tous les utilisateurs et peut poser un risque énorme pour la sécurité." - linuxize.com/post/what-does-chmod-777-mean
MillerC
4

Un problème connexe:

Perdu 3 heures sur plusieurs jours.

Sur une machine AWS EC2, ci-dessous a fonctionné:

sudo chown -R $(whoami) /home/ubuntu/.cache
sudo chown -R $(whoami) /home/ubuntu/.config
sudo chown -R $(whoami) /home/ubuntu/.local
sudo chown -R $(whoami) /home/ubuntu/.npm
sudo chown -R $(whoami) /home/ubuntu/.pm2

J'espère que cela pourra aider.

Manohar Reddy Poreddy
la source
3

J'ai résolu ce problème en modifiant l'autorisation de mon répertoire npm. Je suis allé au répertoire global npm pour moi c'était à

/home/<user-name>

Je suis allé dans ce répertoire en entrant cette commande

cd /home/<user-name>

puis modifié l'autorisation du dossier .npm en entrant cette commande.

sudo chmod -R 777 ".npm"

Cela a fonctionné comme un charme pour moi. Mais il y a une faille de sécurité avec cela, c'est-à-dire que votre répertoire global des packages est accessible à tous les niveaux.

Aniruddh Agarwal
la source
Pourquoi autoriseriez-vous le monde entier à accéder à ce dossier particulier?
egdavid
2

Première installation sans -g (global) à la racine. Après avoir essayé d'utiliser -g (global), cela a fonctionné pour moi.

Renjith
la source
Travaillé!! Sur Mac, j'ai déplacé mon dossier de code vers mon dossier racine: HardDrive /, et "npm install" a fonctionné parfaitement. Ensuite, j'ai déplacé mon dossier de code là où je le voulais dans HardDrive / users / myUserName / Projects / code, j'ai de nouveau exécuté "npm install", et cette fois, cela a fonctionné.
Josh
2

LUBUNTU 19.10 / Même problème en cours d'exécution: $npm start

vidage: Erreur: EACCES: autorisation refusée, ouvrez '/home/simon/xxx/pagebuilder/resources/scripts/registration/node_modules/.cache/@babel/register/.babel.7.4.0.development.json' à Object. fs.openSync (fs.js: 646: 18) à Object.fs.writeFileSync (fs.js: 1299: 33) à save (/ home / simon / xxx / pagebuilder / resources / scripts / registration / node_modules / @ babel / register / lib / cache.js: 52: 15) à _combinedTickCallback (interne / process / next_tick.js: 132: 7) à process._tickCallback (interne / process / next_tick.js: 181: 9) à Function.Module.runMain (module.js: 696: 11) à Object. (/home/simon/xxxx/pagebuilder/resources/scripts/registration/node_modules/@babel/node/lib/_babel-node.js:234:23) à Module._compile (module.js: 653: 30) à Object .Module._extensions..js (module.js: 664: 10) à Module.load (module.js: 566: 32)

Il semble que mon utilisateur par défaut (administrateur) n'avait pas de droits sur les répertoires du module de nœud.

Cela l'a corrigé pour moi!

$ sudo chmod a+w node_modules -R ## from project root

Simon P
la source
2

Essayez d'utiliser ceci: 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 du répertoire:

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

Dans votre éditeur de texte préféré, ouvrez ou créez un fichier ~ / .profile et ajoutez cette ligne:

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

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

source ~/.profile

Testez l'installation du package globalement sans utiliser sudo, j'espère que cela aide

AyushKatiyar
la source
1

Voici la solution pour les utilisateurs GNU / Linux (Debian) (remplacez USERNAME par votre nom d'utilisateur ):

sudo chown -R $USER:$(id -gn $USER) /home/USERNAME/.config
J-Snor
la source
0

Supprimer le dossier dist et cela résout mon problème !!

Hekmat
la source
0

Sous Windows, il s'est avéré que le port était déjà utilisé par IIS.

L'arrêt d'IIS (clic droit, sortie) a résolu le problème.

Atron Seige
la source
0

Changez simplement le propriétaire du node_modulesrépertoire global en votre utilisateur:

sudo chown -R $USER:$GROUP /usr/local/lib/node_modules
didil
la source
0

J'ai essayé la plupart de ces suggestions, mais aucune n'a fonctionné. Ensuite, j'ai couru npm clean-installet cela a résolu mes problèmes.

MoKG
la source
0

node recommande d'exécuter ce qui suit:

 sudo chown -R $USER:$(id -gn $USER) /home/venkatesh/.config

Si vous exécutez

npm config

Vous verrez quelque chose comme ça

                   npm update check failed                   
             Try running with sudo or get access             
            to the local update config store via             
 sudo chown -R $USER:$(id -gn $USER) /home/venkatesh/.config 

Cela a fonctionné pour moi.

Manasvini Ganesh
la source
-3

Exécutez ces commandes et le problème sera résolu!

sudo chmod -R 777 /usr/local/bin
sudo chmod -R 777 /usr/local/lib/node_modules
Nitin Jha
la source
Pour /usr/localet tous les sous-répertoires, les autorisations doivent rwxr-xr-xappartenir à root. Les utilisateurs du système peuvent lire et exécuter dans cette structure de répertoire, mais ne peuvent pas éditer, créer des fichiers. Cela étant dit, votre réponse suggère d'accorder des autorisations à tout le monde. Et, sans décrire comment et ce qui sera affecté, ni pourquoi le problème sera résolu.
Kuliraj