Errores de instalación de npm con error: ENOENT, chmod

128

Estoy tratando de instalar globalmente un módulo npm que acabo de publicar. Cada vez que intento instalar, ya sea desde npm o desde la carpeta, aparece este error.

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

Estoy usando sudo y he verificado tres veces todo en el paquete, todo debería funcionar. Hice un poco de búsqueda y vi un par de casos similiar ninguno de los cuales se han resuelto. Esto es lo que probé.

  • Actualizar npm ( sudo npm install -g npm)
  • Borrar el caché global npm ( sudo npm cache clear)
  • Borrar el caché npm del usuario ( npm cache clear)

Noté que el error tenía que ver con el archivo que estoy vinculando a la ruta, específicamente cuando npm intentó hacer un chmod. Eso no debería ser un problema, mi lib/cli.jstiene permisos normales y npm tiene permisos de superusuario durante esta instalación.

Después de buscar en los documentos de npm, encontré una opción que evitaría que npm creara los enlaces bin ( --no-bin-links), cuando probé la instalación con él, funcionó bien.

Entonces, ¿cuál es el trato? ¿Es este un extraño error marginal que aún no tiene solución?

Editar: para referencia, aquí está el módulo que cargué

giodamelio
fuente
¿está su paquete usando node-gyp? Creo que la llamada no-bin-links está relacionada si es así.
jcollum
No, no hay código nativo en el módulo. Aquí está la fuente del módulo para referencia.
giodamelio
1
El --no-bin-linkssólo se detiene la NGP de enlaces simbólicos en los archivos de la package.json binhash para el camino de la instalación global.
giodamelio
Argh, definitivamente me he encontrado con esto antes, pero no puedo recordar por qué ... te haré saber si se me ocurre.
jcollum
@jcollum Gracias, es realmente muy frustrante, he revisado todo mil millones de veces, pero todavía no puedo evitar sentir que me he perdido algo estúpidamente simple. Eso o tal vez es un error extraño.
giodamelio

Respuestas:

133

Ok, parece que NPM está usando su .gitignorecomo base para el .npmignorearchivo, y por lo tanto ignora /lib. Si agrega un .npmignorearchivo en blanco en la raíz de su aplicación, todo debería funcionar.

[editar] - más información sobre este comportamiento aquí: https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package

badsyntax
fuente
Maldición, eso debe ser. Parece una forma un poco confusa de hacer las cosas. No en una computadora ahora, pero lo intentaré en unas pocas horas.
giodamelio
3
3 horas de frustración se redujeron a una línea en mi .gitignore que estaba volviendo loco la instalación npm -g. Insano.
bryan
2
'type NUL> .npmignore' para windows
Kabir
1
A partir de npm @ 5, el caché npm se cura automáticamente de los problemas de corrupción y se garantiza que los datos extraídos del caché serán válidos. Si desea asegurarse de que todo sea coherente, use 'npm cache verificar' en su lugar.
Abhijeet
1
eliminar el archivo package-lock.json
FennRussel
107

Me encontré con un problema similar

npm cache clean

resuelto.

Genjuro
fuente
11
Lo intenté npm cache verifyy funcionó. Gracias por la pista.
Jaikrat
A partir de npm @ 5, la memoria caché npm se recupera automáticamente de los problemas de corrupción y se garantiza que los datos extraídos de la memoria caché son válidos. Si desea asegurarse de que todo sea coherente, use 'npm cache verificar' en su lugar. Por otro lado, si está depurando un problema con el instalador, puede npm install --cache /tmp/empty-cacheusar un caché temporal en lugar de eliminar el actual.
Daniel ZA
9

Este problema surgió de alguna manera en Mac cuando intentaba ejecutar npm install -g bower. Me estaba dando una serie de errores por no poder encontrar cosas como graceful-fs. No estoy seguro de cómo instalé npm originalmente, pero parece que tal vez se vino abajo con el nodo usando homebrew. Primero corrí

brew uninstall node

Esto eliminó ambos nodey npmde mi camino. A partir de ahí lo acabo de reinstalar

brew install node

Cuando terminó, tenía nodey npmen mi camino y pude correr

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

Esto luego instaló la glorieta con éxito.

La actualización de las fórmulas de preparación y las instalaciones no parecían funcionar para mí, no estoy seguro de por qué. La eliminación de la .npmcarpeta fue algo que funcionó para otras personas, y lo intenté sin éxito. Lo hice esta vez por si acaso. Tenga en cuenta también que ninguno de los siguientes me resolvió el problema, aunque sí lo hizo para otros:

npm cache clean
sudo npm cache clean
usuario1978019
fuente
9

Recibí este error en la instalación de npm y agregar .npmignore no lo resolvió.

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

Intenté ir a la carpeta mencionada y no existía. El error se fijó cuando creé NPM carpeta en itinerancia carpeta.

Esto está en Windows 8.1

Vijay Vepakomma
fuente
4

Tuve el mismo problema, y ​​acabo de encontrar un manejo no mencionado aquí. Aunque contribuiría a la comunidad:

npm install -g myappno estaba copiando el bindirectorio. Descubrí que esto se debe a que no lo incluí filesen mipackage.json

"files": [
  "lib",
  "bin" // this was missing
]
dthree
fuente
Tengo el mismo problema y esta respuesta fue la única buena solución para mí. La razón fue que obtuve la filesclave en mi package.jsoncon algunas entradas como index.jsy LICENSE, pero no la bincarpeta. Por lo tanto, funciona si no hay ninguna filesclave, o si hay una filesclave Y la bincarpeta en.
Rémi Becheras
Gracias, esto me ayudó a despegarme. Una vez que señaló que el directorio bin no estaba incluido en los archivos, pensé "¡Oh, por supuesto!". Luego volví a los documentos para ver si me lo perdí y no se menciona (al menos no en la publicación del blog npm que estaba leyendo). Al menos no estoy loco: P. ¡Gracias por la ayuda!
Chris Schmitz
4

Estaba recibiendo un error similar npm installen una instalación local:

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

No estoy seguro de qué estaba causando el error, pero recientemente instalé un par de nuevos módulos de nodo localmente, actualicé el nodo con homebrew y ejecuté 'npm update -g'.

La única forma en que pude resolver el problema fue eliminar el directorio local node_modules por completo y npm installvolver a ejecutarlo :

cd [path/to/local/installation]
npm rm -rdf node_modules
npm install
g.carey
fuente
4

Tengo un problema similar específicamente: ERR! enoent ENOENT: no existe tal archivo o directorio, chmod 'node_modules / npm / node_modules / request / node_modules / http-signature / node_modules / sshpk / bin / sshpk-conv Probé todas las soluciones anteriores pero no tuve suerte. Estaba usando el cuadro vagabundo, y el proyecto estaba en una carpeta compartida. El problema parece estar solo allí, cuando muevo el proyecto a otra carpeta no compartida (con el host), ¡listo! problema resuelto. En caso de que otra persona estuviera usando también vagabundo

joaco1977
fuente
Me despertaste de una pesadilla, tnx! Tengo 2 adiciones: 1.) Deje de usar npm, use Yarn. 2.) Ejecute npm desde su máquina HOST y no desde la VM.
Flip Vernooij
3

Recibí un mensaje de error similar al intentar npm installun montón de dependencias. Resulta que algunos de ellos no se instalan en Debian / Ubuntu porque esperan /usr/bin/nodeser el nodo ejecutable. Para arreglarlo, necesitas hacer

sudo ln -s nodejs /usr/bin/node 

o mejor aún,

sudo apt-get install nodejs-legacy

Para más información: https://stackoverflow.com/a/21171188/7581

itsadok
fuente
3

Encontré un comportamiento similar después de actualizar a npm 6.1.0. Parecía funcionar una vez, pero luego llegué a un estado con este error al intentar instalar un paquete que se especificó por ruta en el sistema de archivos:

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

Lo siguiente no solucionó el problema :

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

Cómo solucioné el problema :

  • rm package-lock.json
Ian
fuente
2

Creo que su script de café compilado falta en el paquete npm publicado. Intenta escribir un comando de publicación previa .

libertad de acción
fuente
No, la carpeta lib estaba allí cuando la publiqué. Además, recibo el mismo error cuando intento instalar desde la carpeta local. Incluso cuando la carpeta lib está ahí.
giodamelio
1
@giodamelio Estoy de acuerdo con Ryan en este caso. El error dice takeapeek/lib/cmd.jsque no existe. Aunque la carpeta lib podría estar 'allí' cuando publique, no estará 'allí' cuando instale a través de npm a menos que sea parte del repositorio, o a menos que use prepublish para crearlo.
badsyntax
2

En mi caso (código múltiple ENOENT errno 34) el problema era con el ~/.npm/acceso al directorio. En su interior había algunos subdirectorios con root:rootderechos, que causaban problemas mientras ejecutaba comandos como usuario normal (sin sudo). Así que cambié la propiedad de todos los subdirectorios y archivos dentro del ~/.npm/directorio a mi grupo y usuario local. Eso funcionó en mi Ubuntu (en Mac también debería funcionar).

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

Debes saber tu nombre de usuario, ¿verdad? Si no, entonces ejecute $ whoamiy sustituya el nombre de su grupo también, de esta manera:

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

EDITAR:

Caso de prueba :

Desde mi cuenta local /home/johnbinstalé npm globalmente un generador para yeoman, como este:

$ sudo npm install -g generator-laravel

Naturaleza del problema :

La acción anterior causó que algunas dependencias se instalaran dentro del ~/.npm/directorio, teniendo root:rootpropiedad (debido a sudo ...). Evidentemente, npm no se ejecuta como usuario local (o el cambio de dependencias subdirece la propiedad después) al extraer dependencias y escribirlas en un subdirectorio de usuario local ~/.npm/. Mientras npm sea tan descuidado contra los problemas fundamentales de seguridad del sistema de archivos Unix, el problema volverá a ocurrir.

Solución :

  1. Compruebe continuamente si ~/.npm/contiene subdirecciones con propiedad (y / o permisos) que no sean su cuenta de usuario local, especialmente cuando instala o actualiza algo con sodo(root). Si es así, cambie la propiedad interna ~/.npm/a un usuario local de forma recursiva.

  2. Pídale a la npm, bower, grunt, ...comunidad que aborden este problema como lo describí anteriormente.

clip de papel
fuente
2

Recibí este error al intentar instalar un complemento de gruñido. descubrí que tenía una versión desactualizada de npm y el error desapareció después de actualizar npm a la última versión

npm install -g npm
Prabhu Murthy
fuente
1

Probé todas las cosas que encontré en la red ( npm cache cleary rm -rf ~/.npm), pero nada parece funcionar. Lo que resolvió el problema fue actualizar el nodo (y npm) a la última versión. Trata eso.

Nikola M.
fuente
1

En Windows tuve un error similar. Busque pegar Datos de la aplicación y busque la cadena npm.

Reemplacé la cadena 'npm'(incluidas las comillas) con 'npm.cmd'ambos atlasboard\lib\package-dependency-manager.jsy atlasboard\lib\cli\commands.js. Eso solucionó el problema.

Vinicius Carvalho
fuente
1

El mismo error durante la instalación global ( npm install -g mymodule) para el paquete con un script no existente.

En package.json:

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

Pero el ./bin/moduleno existía, como se llamaba modulejs.

hg.
fuente
1
  1. Instale la última versión del nodo
  2. Ejecutar: npm cache clean
  3. Ejecute: npm install cordova -g
Dilhan Jayathilake
fuente
1

Puede obtener este error si su node.js también está dañado de alguna manera. Solucioné este error desinstalando / reiniciando / instalando node.js completamente y solucionó este error, junto con los otros tres misteriosos errores que se producen.

LAdams87
fuente
1

Tenga cuidado con los valores no válidos para las claves "directorios" y "archivos" en package.json

Si comienza con una nueva aplicación y desea comenzar completamente en blanco, debe comenzar en una carpeta vacía completa o tener un archivo package.json válido.

Si no desea crear un archivo package.json primero, simplemente escriba: npm i some_package

El paquete con el nombre "some_package" debe instalarse correctamente en una nueva subcarpeta "node_modules".

Si primero crea un archivo package.json, escriba: npm init Mantenga todos los valores predeterminados (simplemente haciendo clic en ENTRAR), debería terminar con un archivo válido.

Debe tener un aspecto como este:

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

Tenga en cuenta que faltan las siguientes claves: " directorios ", " repositorio " y " archivos ". Parece que si usa valores incorrectos para " directorios " y / o " archivos ", no podrá instalar el paquete. Dejar estas llaves fuera, resolvió el problema para mí.

También tenga en cuenta la clave " principal ". Este está presente, pero contiene un valor no válido. No existe el archivo "index.js" (todavía). Puede quitarlo con seguridad.

Ahora escriba: npm i some_package y el paquete con el nombre "some_package" debe instalarse correctamente en una nueva subcarpeta "node_modules".

RWC
fuente
1

Probé casi todo y finalmente esto:

Simplemente elimine node_modules y luego 'npm install'vuelva a ejecutar

Alex Stephens
fuente
0

Tuve un problema similar con una causa diferente: el yo nodegenerador se había agregado "files": ["lib/"]a mi package.jsony porque mi cli.jsestaba fuera dellib/ directorio, se omitía al publicar en npm.

(El problema de Yeoman en https://github.com/yeoman/generator-node/issues/63 debería solucionarse pronto).

Nathan Friedly
fuente
0

Recibía el error "Error: ENOENT, stat 'C: \ Users \ userName \ AppData \ Roaming \ npm'. Pero no había tal directorio. Creé el directorio y la instalación de npm comenzó a funcionar

k.iyengar
fuente
0

Recientemente actualicé al nodo 4.2.1 en una máquina con Windows 7 x64. Cuando se ejecuta

npm install -g bower

Tengo un error similar:

npm ERR! enoent ENOENT: no existe tal archivo o directorio, abra 'C: \ Users \ THE_USERNAME \ AppData \ Local \ Temp \ npm-THE_HASH'

Pensando que estaba relacionado con la ruta de AppData, jugué con

npm config edit

y

npm config edit --global

para cambiar los campos prefijo, caché y tmp, pero recibió el mismo error con las nuevas rutas:

npm ERR! enoent ENOENT: no existe tal archivo o directorio, abra 'C: \ Users \ THE_USERNAME \ npm-temp \ npm-THE_HASH'

Todos los comandos se ejecutaron como administrador, por lo que tenía permisos completos.

Entonces pensé que había algunos problemas con los archivos existentes, así que corrí:

npm cache clean

Pero tengo el mismo error. Sin embargo, todavía había algunos archivos temporales por ahí. Eliminar manualmente todos los datos temporales con cygwin finalmente solucionó el problema para mí:

rm -rf bower bower.cmd node_modules etc

Si solo tiene cmd de Windows, podría usar algo como

rmdir /S THE_TEMP_DIR

eliminar todos los subdirectorios (aunque si tiene dependencias de nodo profundamente anidadas, esto es notoriamente problemático)

Entonces, tal vez haya algunos problemas con la actualización de npm y tener versiones de Bower u otros paquetes dando vueltas. En mi caso ese parecía ser el problema

Andrew Johnston
fuente
0

Al instalar iónico, obtuve el siguiente error

115648 error enoent ENOENT: no existe tal archivo o directorio, cambie el nombre de '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 '

No se llamó ansia ninguna carpeta en ese camino. Lo creé allí y lo instalé correctamente.

Vijay Mishra
fuente
0

Si trató de "hacer la instalación" en el directorio de su proyecto con este error, puede intentarlo:

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

entonces puedes intentar "hacer la instalación"

Si tiene el "npm ERR! Enoent ENOENT: no existe tal archivo o directorio, chmod '... / djam-backend / node_modules / js-beautify / js / bin / css-beautify.js'", entonces puede intentar instalar alguna versión anterior de js-beautify, más comentarios: https://github.com/beautify-web/js-beautify/issues/1247

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

y la ejecución "hacer instalar". Parece que funciona en caso de que no tenga otras dependencias que requieran una versión superior (1.7.0), en este caso debe degradar estos paquetes también en los paquetes.json.

o

Alex
fuente
0

Nada de lo anterior funcionó para mí. Pero yarn installfuncionó, luego npm icomenzó a trabajar. No estoy seguro de qué hilo reparó, ¡pero es una solución rápida y fácil!

Todd Hale
fuente
0

Primero hacer

 npm rm -rdf node_modules

entonces hazlo

npm install

Después de eso, instale los archivos que desee agregar

Shreyash Shetty
fuente
0

Tuve un error similar con npm en un contenedor docker para webpack. El problema fue causado por el argumento de la línea de comando --user de la ejecución de Docker, porque el usuario y el grupo dados allí de alguna manera arruinaron los derechos en el volumen local. Espero que esto ayude a alguien :)

Hajo
fuente
-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.``

Me enfrentaba a un error similar, pero intenté ejecutar el comando create-react-app muchas veces y finalmente se creó, este fue el problema con mi conexión a Internet. Comprueba tu conexión a Internet

chandra mohan
fuente
-16

Por favor intente esto

SET HTTP_PROXY=<proxy_name>

Entonces prueba ese comando. Funcionará

usuario3030233
fuente
donde pongo esto?
eduardosufan