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
changez vos permissions de fichiers .. comme ça
d'abord vérifier à 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
il faut donc changer cela en changeant root en tant qu'utilisateur mais en exécutant d'abord la commande ci-dessous pour vérifier votre utilisateur actuel Comment obtenir le nom de l'utilisateur actif via la ligne de commande sous OS X?
id -un
puis changer de propriétaire
Sudo chown -R [owner] /usr/local/lib/node_modules
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 au niveau des super-utilisateurs. 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 a la permission d'accéder, de modifier ou de supprimer presque tous les fichiers de votre ordinateur. Les comptes d'utilisateur normaux peuvent accéder à, modifier ou supprimer beaucoup moins de fichiers. Les restrictions sur un compte normal protègent votre ordinateur des programmes ou des utilisateurs non autorisés ou nuisibles. Certains processus vous obligent à effectuer des actions sur des fichiers ou des dossiers auxquels vous n'êtes normalement pas autorisé à accéder. 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'est pas autorisé à modifier.
Tout ce que vous avez à faire est d’ajouter USER au propriétaire de/local/lib
Sudo chown -R $USER /usr/local/lib
Lors de l'installation de packages globaux dans ubuntu , vous devez disposer d'autorisations d'écriture spéciales pour pouvoir écrire dans le dossier usr/bin
. C’est pour des raisons de sécurité . Donc, chaque fois que vous installez un paquet global, utilisez:
Sudo npm install -g [package-name]
Pour votre cas particulier, ce sera:
Sudo npm install -g TypeScript
Si vous rencontrez ce problème sur votre Mac. Suivez ces étapes
Vérifier 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 des fichiers comme ci-dessous, l'un d'eux est ci-dessous
drwxr-xr-x 3 root wheel 768 29 mai 02:21 node_modules
avez-vous remarqué que le fichier ci-dessus est propre à la racine, car vous devez y apporter des modifications car vous devez changer le propriétaire du chemin.
vous pouvez utiliser check qui est l'utilisateur actuel avec cette commande
id -un (in my case user is yamsol)
et ensuite 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", j'appellerai cette commande de cette façon
Sudo chown -R yamsol: /usr/local/lib/node_modules
c'est tout.
Pour minimiser les risques d'erreurs d'autorisations, vous pouvez configurer npm pour utiliser un autre répertoire. Dans cet exemple, vous allez créer et utiliser un répertoire caché dans votre répertoire de base.
Faites des sauvegardes de votre ordinateur. Sur la ligne de commande, dans votre répertoire de base, 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 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
Pour tester votre nouvelle configuration, installez un paquet globalement sans utiliser Sudo
J'essayais d'installer react expo et à part de Sudo, je devais ajouter --unsafe-perm
comme ça. Cela résout mon problème
Sudo npm install -g expo-cli --unsafe-perm
Il semble que vous rencontriez des problèmes d'autorisation. Si vous installez npm-packages
, il est possible que vous obteniez une erreur EACCES
lorsque vous essayez d'installer un package globalement. Cela signifie que vous n'êtes pas autorisé à écrire dans les répertoires que npm
utilise pour stocker les packages et les commandes globaux.
Essayez d’exécuter les commandes: Sudo chmod u+x -R 775 ~/.npm
et Sudo chown $USER -R ~/.npm
ou vous pouvez simplement exécuter n’importe quelle commande npm
avec Sudo
, qui devrait vous permettre de résoudre votre problème.
Si vous installez un npm-package
localement, vous devriez alors vous trouver dans le répertoire de votre projet local et essayer d’exécuter la commande Sudo npm install <pkg-name>
pour installer le package requis. L'utilisation de Sudo
a pour objectif de modifier vos autorisations de propriétaire afin que vous puissiez autoriser votre utilisateur actuel à exécuter les commandes npm
.
Je vous recommande de regarder https://docs.npmjs.com/getting-started/fixing-npm-permissions
Utilisez cette commande pour installer npm
en tant qu'utilisateur Sudo:
Sudo npm install -g create-react-app instead of npm install -g create-react-app
Soyez prudent avec toutes les réponses qui changent le propriétaire de tous les répertoires sous / usr/local En gros, ne bousillez pas le système Linux !!!
Je pense que le meilleur moyen est d'utiliser votre propre dossier pour localiser tous les packages globaux: https://www.competa.com/blog/how-to-run-npm-without-Sudo/
Pour linux/ubuntu si la commande
npm install -g <package_name>
npm WARN deprecated [email protected]: 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
Fix: Installer avec les permissions root
Sudo npm install <package_name> -g
J'ai utilisé Sudo, mais le problème n'a pas été résolu, j'ai résolu le problème en modifiant les droits du dossier node_modules.
Sudo chmod -R 777 node_modules
Si vous le souhaitez, vous pouvez remplacer 777 par un autre code si vous ne définissez pas l'autorisation pour tous les utilisateurs/groupes.
Vous pouvez simplement changer le 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 sudo npm install -g json-server
c'est tout.
J'ai pu résoudre ce problème en installant nvm
, puis en définissant le noeud sur la dernière version.
nvm
en utilisant curl
(pour la dernière version, accédez à nvm.sh )curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
nvm ls
v10.12.0
default -> v10.12 (-> v10.12.0)
noeud -> stable (-> v10.12.0) (par défaut)
stable -> 10.12 (-> v10.12.0)
…
nvm use v10.12
nvm n'est pas compatible avec l'option "prefix" de npm config: actuellement définie sur ""
nvm use --delete-prefix v10.12.0
Après avoir suivi les commandes ci-dessus, vous pourrez installer react/angular dans Ubuntu.
Vous devez disposer 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 la commande suivante sur votre terminal:
Sudo i
et exécutez simplement la commande pour installer React:
npm install -g create-react-app
On dirait que vous avez essayé d'installer un paquet npm globalement plutôt que localement, comme le décrit le man npm install
:
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 de Node.js (/ usr/local/lib/node_modules), car votre journal de débogage suggéré.
Au lieu d'utiliser -g
, utilisez --save
, qui enregistrera automatiquement le package en tant que dépendance de votre fichier package.json
:
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 de npm install express-generator -g
, mais ce n'est pas le cas. une bonne idée, causant éventuellement des problèmes d'autorisation.
NOTICE
Il existe des instructions pour installer express-generator
avec l'option -g
, afin que le script express-cli.js
soit disponible sur le chemin système, mais vous pouvez également utiliser le script installé localement, situé à l'emplacement node_modules
si votre projet npm:
$ ./node_modules/express-generator/bin/express-cli.js --view=pug myapp
Si un message tel que/usr/bin/env: ‘nœud’: Aucun fichier ou répertoire ne s'affiche, installez
nodejs-legacy
(Debian/Ubuntu)
IMHO, en utilisant -g
(également en utilisant Sudo
), c'est comme hic sunt dracones , si vous n'êtes pas sûr des conséquences.
Pour plus d'informations:
Je trouve le même problème avec le module webpack. Ma solution - supprimer le dossier node_modules rm -rf node_modules et exécuter npm i sans Sudo - l'installation devrait fonctionner.