Erreurs d'installation npm avec l'erreur: ENOENT, chmod


128

J'essaye d'installer globalement un module npm que je viens de publier. Chaque fois que j'essaie d'installer, que ce soit à partir de npm ou du dossier, j'obtiens cette erreur.

npm ERR! Error: ENOENT, chmod '/usr/local/lib/node_modules/takeapeek/lib/cmd.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.8.0-19-generic
npm ERR! command "node" "/usr/local/bin/npm" "install" "-g" "takeapeek"
npm ERR! cwd /home/giodamlio
npm ERR! node -v v0.10.6
npm ERR! npm -v 1.3.6
npm ERR! path /usr/local/lib/node_modules/takeapeek/lib/cmd.js
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/giodamlio/npm-debug.log
npm ERR! not ok code 0

J'utilise sudo et j'ai vérifié trois fois tout dans le package, tout devrait fonctionner. J'ai fait quelques recherches et j'ai vu quelques cas similaires dont aucun n'a été résolu. Voici ce que j'ai essayé.

  • Mettre à jour npm ( sudo npm install -g npm)
  • Effacer le cache global npm ( sudo npm cache clear)
  • Effacer le cache npm de l'utilisateur ( npm cache clear)

J'ai remarqué que l'erreur était liée au fichier que je lie au chemin, en particulier lorsque npm a essayé de faire un chmod. Cela ne devrait pas être un problème, mon lib/cli.jsa des autorisations normales et npm a des autorisations de super-utilisateur pendant cette installation.

Après avoir fouillé dans les documents npm, j'ai trouvé une option qui empêcherait npm de créer les liens bin ( --no-bin-links), lorsque j'ai essayé l'installation avec, cela fonctionnait bien.

Alors, quel est le problème? Est-ce un étrange bug de cas marginal qui n'a pas encore de solution?

Edit: Pour référence, voici le module que j'ai téléchargé


votre paquet utilise-t-il node-gyp? Je pense que l'appel no-bin-links est lié si oui.
jcollum

Non, pas de code natif dans le module. Voici la source du module pour référence.
giodamelio

1
Le --no-bin-linkssimple arrête npm de lier symboliquement les fichiers du binhachage de package.json au chemin lors de l'installation globale.
giodamelio

Argh, j'ai certainement rencontré ça avant mais je ne me souviens pas pourquoi ... je te ferai savoir si ça me vient à l'esprit.
jcollum

@jcollum Merci, c'est vraiment assez frustrant, j'ai tout vérifié un milliard de fois, mais je ne peux toujours pas m'empêcher de penser que j'ai raté quelque chose de stupide et simple. C'est peut-être un bug étrange.
giodamelio

Réponses:


133

Ok, il semble que NPM utilise votre .gitignorecomme base pour le .npmignorefichier et ignore donc /lib. Si vous ajoutez un .npmignorefichier vierge à la racine de votre application, tout devrait fonctionner.

[modifier] - plus d'informations sur ce comportement ici: https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package


Darn, ça doit être ça. Cela semble être une façon un peu déroutante de faire les choses. Pas sur un ordinateur maintenant, mais je vais l'essayer dans quelques heures.
giodamelio

3
3 heures de frustration se sont résumées à une ligne dans mon .gitignore qui faisait flipper l'installation npm -g. Insensé.
bryan

2
'type NUL> .npmignore' pour Windows
Kabir

1
À partir de npm @ 5, le cache npm se guérit automatiquement des problèmes de corruption et les données extraites du cache sont garanties valides. Si vous voulez vous assurer que tout est cohérent, utilisez plutôt 'npm cache verify'.
Abhijeet

1
supprimer le fichier package-lock.json
FennRussel

107

J'ai rencontré un problème similaire,

npm cache clean

résolu.


11
J'ai essayé npm cache verifyet cela a fonctionné. merci pour un indice.
Jaikrat

À partir de npm @ 5, le cache npm se guérit automatiquement des problèmes de corruption et les données extraites du cache sont garanties valides. Si vous voulez vous assurer que tout est cohérent, utilisez plutôt 'npm cache verify'. D'un autre côté, si vous déboguez un problème avec le programme d'installation, vous pouvez npm install --cache /tmp/empty-cacheutiliser un cache temporaire au lieu de détruire le cache réel.
Daniel ZA

9

Ce problème est survenu pour moi sur Mac lorsque j'essayais de courir npm install -g bower. Cela me donnait un certain nombre d'erreurs pour ne pas être en mesure de trouver des choses comme gracieux-fs. Je ne sais pas comment j'ai installé npm à l'origine, mais il semble que cela soit venu avec node en utilisant homebrew. J'ai d'abord couru

brew uninstall node

Cela a supprimé à la fois nodeet npmde mon chemin. De là, je viens de le réinstaller

brew install node

Quand il a terminé, j'ai eu nodeet npmsur mon chemin et j'ai pu courir

rm -rf ~/.npm
npm install -g bower

Cela a ensuite installé le bower avec succès.

La mise à jour des formules de brassage et la mise à niveau des installations ne semblaient pas fonctionner pour moi, je ne sais pas pourquoi. La suppression du .npmdossier était quelque chose qui avait fonctionné pour d'autres personnes, et je l'avais essayé sans succès. Je l'ai fait cette fois au cas où. Notez également qu'aucun des éléments suivants n'a résolu le problème pour moi, bien que ce soit le cas pour d'autres:

npm cache clean
sudo npm cache clean

9

J'obtenais cette erreur lors de l'installation de npm et l'ajout de .npmignore ne l'a pas résolu.

Erreur: ENOENT, stat 'C: \ Users \ My-UserName \ AppData \ Roaming \ npm'

J'ai essayé d'accéder au dossier mentionné et il n'existait pas. L'erreur a été corrigée lorsque j'ai créé le dossier npm dans le dossier Roaming .

C'est sur Windows 8.1


4

J'ai eu le même problème, et je viens de trouver une manipulation non mentionnée ici. Bien que je contribue à la communauté:

npm install -g myappne copiait pas le binrépertoire. J'ai trouvé que c'était parce que je ne l'ai pas inclus filesdans monpackage.json

"files": [
  "lib",
  "bin" // this was missing
]

J'ai eu le même problème et cette réponse était la seule bonne solution pour moi. La raison était que j'avais la filesclé dans mon package.jsonavec quelques entrées comme index.jset LICENSE, mais pas le bindossier. Cela fonctionne donc s'il n'y a pas de filesclé du tout, ou s'il y a une filesclé ET le bindossier dans.
Rémi Becheras

Merci, cela m'a aidé à me décoller. Une fois que vous avez fait remarquer que le répertoire bin n'était pas inclus dans les fichiers, j'ai pensé "oh! Bien sûr!". Ensuite, je suis retourné à la documentation pour voir si je l'avais manqué et si cela n'était pas mentionné (du moins pas dans le billet de blog npm que je lisais). Au moins je ne suis pas fou: P. Merci pour l'aide!
Chris Schmitz

4

J'obtenais une erreur similaire npm installsur une installation locale:

npm ERR! enoent ENOENT: no such file or directory, stat '[path/to/local/installation]/node_modules/grunt-contrib-jst'

Je ne suis pas sûr de la cause de l'erreur, mais j'avais récemment installé quelques nouveaux modules de nœuds localement, mis à niveau le nœud avec homebrew et exécuté 'npm update -g'.

La seule façon dont j'ai pu résoudre le problème était de supprimer entièrement le répertoire local node_modules et de le relancer npm install:

cd [path/to/local/installation]
npm rm -rdf node_modules
npm install

4

J'ai un problème similaire en particulier: ERR! enoent ENOENT: aucun fichier ou répertoire de ce type, chmod 'node_modules / npm / node_modules / request / node_modules / http-signature / node_modules / sshpk / bin / sshpk-conv J'ai essayé toutes les solutions ci-dessus mais pas de chance. J'utilisais vagrant box et le projet était dans un dossier partagé. Les problèmes ne semblent être que là, lorsque je déplace le projet vers un autre dossier non partagé (avec l'hôte), voila! problème résolu. Juste au cas où une autre personne utiliserait aussi vagrant


Vous m'avez réveillé d'un cauchemar, tnx! J'ai 2 ajouts: 1.) Arrêtez d'utiliser npm, utilisez Yarn. 2.) Exécutez npm à partir de votre machine HOST et non de la VM.
Flip Vernooij

3

J'ai reçu un message d'erreur similaire en essayant npm installun tas de dépendances. Il s'avère que certains d'entre eux ne parviennent pas à s'installer sur Debian / Ubuntu car ils s'attendent /usr/bin/nodeà être l'exécutable du nœud. Pour réparer, vous devez faire

sudo ln -s nodejs /usr/bin/node 

ou mieux encore,

sudo apt-get install nodejs-legacy

Pour plus d'informations: https://stackoverflow.com/a/21171188/7581


3

J'ai rencontré un comportement similaire après la mise à niveau vers npm 6.1.0. Cela a semblé fonctionner une fois, mais je suis ensuite entré dans un état avec cette erreur en essayant d'installer un package spécifié par le chemin sur le système de fichiers:

npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall rename

Les éléments suivants n'ont pas résolu le problème :

  • rm -rf node_modules
  • npm cache clean(a donné npm ERR! As of npm@5, the npm cache self-heals... use 'npm cache verify' instead.)
  • npm cache verify
  • rm -rf ~/.npm

Comment j'ai résolu le problème :

  • rm package-lock.json

2

Je pense que votre script de café compilé est absent du package npm publié. Essayez d'écrire une commande de prépublication .


Non, le dossier lib était là quand je l'ai publié. En outre, j'obtiens la même erreur lorsque j'essaye d'installer à partir du dossier local. Même lorsque le dossier lib est là.
giodamelio

1
@giodamelio Je suis d'accord avec Ryan sur celui-ci. L'erreur dit takeapeek/lib/cmd.jsn'existe pas. Même si le dossier lib peut être «là» lorsque vous publiez, il ne sera pas «là» lorsque vous installez via npm à moins qu'il ne fasse partie du référentiel, ou à moins que vous n'utilisiez la pré-publication pour le créer.
badsyntax

2

Dans mon cas (code multiple ENOENT errno 34), le problème était lié à l' ~/.npm/accès au répertoire. À l'intérieur, il y avait des sous-répertoires ayant des root:rootdroits, qui posaient des problèmes lorsque j'exécutais des commandes en tant qu'utilisateur normal (sans sudo). J'ai donc changé la propriété de tous les sous-répertoires et fichiers à l'intérieur de ~/.npm/dir en mon utilisateur et groupe locaux. Cela a fait l'affaire sur mon Ubuntu (sur Mac devrait fonctionner aussi).

$ sudo chown yourusername.yourgroupname ~/.npm/ -R

Vous devriez connaître votre nom d'utilisateur, non? Si non, exécutez $ whoamiet remplacez le nom de votre groupe par lui aussi, comme ceci:

$ sudo chown johnb.johnb ~/.npm/ -R

ÉDITER:

Cas de test :

Depuis mon compte local, /home/johnbj'ai installé globalement npm un générateur pour yeoman, comme ceci:

$ sudo npm install -g generator-laravel

Nature du problème :

L'action ci-dessus a provoqué l'installation de certaines dépendances dans ~/.npm/dir, ayantroot:root propriété (à cause de sudo ...). Évidemment, npm ne s'exécute pas en tant qu'utilisateur local (ou modifie ensuite la propriété des sous-répertoires de dépendances) lors de l'extraction des dépendances et de leur écriture dans un sous-répertoire utilisateur local ~/.npm/. Tant que npm serait si insouciant face aux problèmes fondamentaux de sécurité du système de fichiers Unix, le problème se reproduirait.

Solution :

  1. Vérifiez en permanence s'il ~/.npm/contient des sous-répertoires avec la propriété (et / ou les autorisations) autres que votre compte d'utilisateur local, en particulier lorsque vous installez ou mettez à jour quelque chose avec sodo(root). Si tel est le cas, modifiez la propriété à l'intérieur ~/.npm/en un utilisateur local de manière récursive.

  2. Demandez à la npm, bower, grunt, ...communauté de résoudre ce problème comme je l'ai décrit ci-dessus.


2

J'ai eu cette erreur en essayant d'installer un plugin grunt. J'ai trouvé que j'avais une version obsolète de npm et l'erreur a disparu après la mise à jour de npm vers la dernière version

npm install -g npm

1

J'ai essayé tous les trucs que j'ai trouvés sur le net ( npm cache clearet rm -rf ~/.npm), mais rien ne semble fonctionner. Ce qui a résolu le problème était la mise à jour du nœud (et de npm) vers la dernière version. Essayez ça.


1

Dans Windows, j'ai eu une erreur similaire. Recherchez coller les données d'application et recherchez la chaîne npm.

J'ai remplacé la chaîne 'npm'(y compris les guillemets) par 'npm.cmd'à la fois atlasboard\lib\package-dependency-manager.jset atlasboard\lib\cli\commands.js. Cela a résolu le problème.


1

La même erreur lors de l'installation globale ( npm install -g mymodule) pour le package avec un script non existant.

Dans package.json:

    ...
    "bin": {
      "module": "./bin/module"
    },
    ...

Mais le ./bin/modulen'existait pas, comme il a été nommé modulejs.


1
  1. Installer la dernière version du nœud
  2. Exécuter: npm cache clean
  3. Exécuter: npm install cordova -g

1

Vous pouvez obtenir cette erreur si votre node.js est également corrompu. J'ai corrigé cette erreur en désinstallant / redémarrez / installant complètement node.js et cela a corrigé cette erreur, ainsi que les trois autres erreurs mystérieuses qui sont générées.


1

Faites attention aux valeurs invalides pour les clés "répertoires" et "fichiers" dans package.json

Si vous démarrez avec une nouvelle application et que vous souhaitez démarrer complètement vide, vous devez soit démarrer dans un dossier vide complet, soit contenir un fichier package.json valide.

Si vous ne souhaitez pas créer d'abord un fichier package.json, tapez simplement: npm i some_package

Le paquet avec le nom "some_package" doit être installé correctement dans un nouveau sous-dossier "node_modules".

Si vous créez d'abord un fichier package.json, tapez: npm init Conserver toutes les valeurs par défaut (en cliquant simplement sur ENTRÉE), vous devriez vous retrouver avec un fichier valide.

Ça devrait ressembler à ça:

{
  "name": "yourfoldername",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Notez que les clés suivantes sont manquantes: " répertoires ", " référentiel " et " fichiers ". Il semble que si vous utilisez des valeurs incorrectes pour " répertoires " et / ou " fichiers ", vous ne pourrez pas installer le package. Laisser ces clés de côté, a résolu le problème pour moi.

Notez également la touche " principale ". Celui-ci est présent, mais il contient une valeur invalide. Aucun fichier "index.js" n'existe (encore). Vous pouvez le supprimer en toute sécurité.

Maintenant, tapez: npm i some_package et le package avec le nom "some_package" doit être installé correctement dans un nouveau sous-dossier "node_modules".


1

J'ai presque tout essayé puis finalement ceci:

Il suffit de supprimer node_modules puis exécutez à 'npm install'nouveau


0

J'ai eu un problème similaire avec une cause différente: le yo nodegénérateur avait ajouté "files": ["lib/"]à mon package.jsonet parce que mon cli.jsétait en dehors dulib/ répertoire, il était ignoré lors de la publication sur npm.

(Le problème Yeoman sur https://github.com/yeoman/generator-node/issues/63 devrait être corrigé bientôt.)


0

J'obtenais l'erreur "Erreur: ENOENT, stat 'C: \ Users \ userName \ AppData \ Roaming \ npm'. Mais ce répertoire n'existait pas. J'ai créé le répertoire et l'installation de npm a commencé à fonctionner


0

J'ai récemment mis à niveau vers le nœud 4.2.1 sur une machine Windows 7 x64. En courant

npm install -g bower

J'ai eu une erreur similaire:

npm ERR! enoent ENOENT: aucun fichier ou répertoire de ce type, ouvrez 'C: \ Users \ THE_USERNAME \ AppData \ Local \ Temp \ npm-THE_HASH'

Pensant que c'était lié au chemin AppData, j'ai joué avec

npm config edit

et

npm config edit --global

pour changer les champs prefix, cache et tmp mais a reçu la même erreur avec les nouveaux chemins:

npm ERR! enoent ENOENT: aucun fichier ou répertoire de ce type, ouvrez 'C: \ Users \ THE_USERNAME \ npm-temp \ npm-THE_HASH'

Toutes les commandes étaient exécutées en tant qu'administrateur, j'avais donc toutes les autorisations.

Ensuite, j'ai pensé qu'il y avait des problèmes avec les fichiers existants, alors j'ai couru:

npm cache clean

Mais j'ai eu la même erreur. Cependant, il y avait encore des fichiers temporaires qui traînaient. La suppression manuelle de toutes les données temporaires avec cygwin a finalement résolu le problème pour moi:

rm -rf bower bower.cmd node_modules etc

Si vous n'avez que Windows cmd, vous pouvez utiliser quelque chose comme

rmdir /S THE_TEMP_DIR

pour supprimer tous les sous-répertoires (bien que si vous avez des dépendances de nœuds profondément imbriquées, cela est notoirement problématique)

Donc, il y a peut-être des problèmes avec la mise à niveau de npm et la présence de versions de bower ou d'autres packages. Dans mon cas, cela semblait être le problème


0

Lors de l'installation d'ionic, j'ai eu une erreur ci-dessous

Erreur 115648 enoent ENOENT: aucun fichier ou répertoire de ce type, renommez 'C: \ Users \ UserName \ AppData \ Roaming \ npm \ node_modules.staging \ ansi-b11f0c4b' -> 'C: \ Users \ UserName \ AppData \ Roaming \ npm \ node_modules \ ionic \ node_modules \ cordova-lib \ node_modules \ ansi '

Aucun dossier n'a été appelé ansisur ce chemin. Je l'ai créé là-bas et il s'est installé correctement.


0

Si vous avez essayé de "faire l'installation" dans le répertoire de votre projet avec cette erreur, vous pouvez l'essayer:

rm -rf ./node_modules
npm cache clear
npm remove sails

alors vous pouvez essayer de "faire l'installation"

Si vous avez le "npm ERR! Enoent ENOENT: aucun fichier ou répertoire de ce type, chmod '... / djam-backend / node_modules / js-beautify / js / bin / css-beautify.js'" alors vous pouvez essayer d'installer une version précédente du js-beautify, plus de commentaires: https://github.com/beautify-web/js-beautify/issues/1247

"dependencies": {
  ...
  "js-beautify": "1.6.14"
  ...
}

et le lancer "make install". Cela semble fonctionner dans le cas où vous n'avez pas d'autres dépendances qui nécessitent une version supérieure (1.7.0) dans ce cas, vous devez également rétrograder ces packages dans packages.json.

ou


0

Aucune de ces réponses n'a fonctionné pour moi. Mais a yarn installtravaillé, puis a npm icommencé à travailler. Je ne sais pas quel fil fixe, mais une solution rapide et facile!


0

Faites d'abord

 npm rm -rdf node_modules

alors fais

npm install

Après cela, installez les fichiers que vous souhaitez ajouter


0

Il y avait une erreur similaire avec npm dans un conteneur docker pour webpack. Le problème était dû à l'argument de ligne de commande --user de l'exécution de docker, car l'utilisateur et le groupe donnés là-dedans ont en quelque sorte gâché les droits sur le volume local. J'espère que cela aide quelqu'un :)


-3
Creating a new React app in C:\Users\CM\Downloads\react\github-profile.
Installing packages. This might take a couple of minutes.
Installing react, react-dom, and react-scripts...

npm ERR! path C:\Users\CM\AppData\Roaming\npm-cache_cacache\content- 

v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996b1fa335b1
0893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015eec65545008a3cad93d00f806

npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall lstat
npm ERR! Error: EPERM: operation not permitted, lstat 
'C:\Users\CM\AppData\Roaming\npm-cache_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996
b1fa335b10893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015eec6
5545008a3cad93d00f806'
npm ERR! { [Error: EPERM: operation not permitted, lstat 
'C:\Users\CM\AppData\Roaming\npm-cache_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996b1f 
a335b10893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015eec6554500
8a3cad93d00f806']

npm ERR! cause:
npm ERR! { Error: EPERM: operation not permitted, lstat 
'C:\Users\CM\AppData\Roaming\npm-cache_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996b1
fa335b10893d67f7339e4 
af62bb688c0da2aaca839d4c9d51e2eb015eec65545008a3cad93d00f806'
npm ERR! errno: -4048,
npm ERR! code: 'EPERM',
npm ERR! syscall: 'lstat',
npm ERR! path:
npm ERR! 'C:\Users\CM\AppData\Roaming\npm-cache\_cacache\content- 


npm ERR! stack:
npm ERR! 'Error: EPERM: operation not permitted, lstat 
'C:\Users\CM\AppData\Roaming\npm-cache\_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996
b1fa335b10893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015
eec65545008a3cad93d00f806'',
npm ERR! errno: -4048,
npm ERR! code: 'EPERM',
npm ERR! syscall: 'lstat',
npm ERR! path:
npm ERR! 'C:\Users\CM\AppData\Roaming\npm-cache\_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996b1fa335
b10893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015eec65545008a3cad93
d00f806',
npm ERR! parent: 'postcss-image-set-function' }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It's possible that the file was already in use (by a
text editor or antivirus),
npm ERR! or that you lack permissions to access it.
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double- 
check thenpm 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! C:\Users\CM\AppData\Roaming\npm-cache_logs\2019-03-22T10_
27_19_722Z-debug.log


Aborting installation.
npm install --save --save-exact --loglevel error react react-dom react- 
scripts   has failed.

Deleting generated file... node_modules
Deleting generated file... package.json
Deleting GitHub-profile/ from C:\Users\CM\Downloads\reactDone.``

J'étais confronté à une erreur similaire mais j'ai essayé d'exécuter la commande create-react-app à plusieurs reprises et finalement elle a été créée, c'était le problème avec ma connexion Internet. Vérifiez votre connection internet


-16

Veuillez essayer ceci

SET HTTP_PROXY=<proxy_name>

Alors essayez cette commande, cela fonctionnera


où dois-je mettre ça?
eduardosufan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.