NPM no puede instalar dependencias: intente desbloquear algo que no se ha bloqueado

192

He estado tratando de ejecutar una instalación npm en mi archivo package.json, pero tengo muchos problemas. Sigue diciendo "Error: intento de desbloquear XXX, que no ha sido bloqueado" en todas mis dependencias. Aquí hay uno de ellos:

Error: Attempt to unlock tbd@~0.6.4, which hasn't been locked
        at unlock (/usr/local/lib/node_modules/npm/lib/cache.js:1304:11)
        at cb (/usr/local/lib/node_modules/npm/lib/cache.js:646:5)
        at /usr/local/lib/node_modules/npm/lib/cache.js:655:20
        at /usr/local/lib/node_modules/npm/lib/cache.js:1290:7
        at /usr/local/lib/node_modules/npm/node_modules/lockfile/lockfile.js:167:38
        at OpenReq.Req.done (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:144:5)
        at OpenReq.done (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:64:22)
        at Object.oncomplete (fs.js:107:15)

Si intento ejecutarlo como sudo, parece ir más allá y comenzar a instalar algunos paquetes, pero en su lugar aparecen algunos errores nuevos:

> chokidar@0.8.1 postinstall /Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/chokidar
> node setup-deps.js

shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied

node.js:811
    var cwd = process.cwd();
                      ^
Error: EACCES, permission denied
    at Function.startup.resolveArgv0 (node.js:811:23)
    at startup (node.js:58:13)
    at node.js:902:3
npm ERR! error rolling back Error: ENOTEMPTY, rmdir '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q'
npm ERR! error rolling back  karma@0.10.9 { [Error: ENOTEMPTY, rmdir '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q' }
npm ERR! Error: ENOENT, chown '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/socket.io/lib/socket.io.js'

Recientemente actualicé mis instalaciones de nodo y npm. Entonces, tal vez eso tenga algo que ver con eso. Además, la mayor parte de mi desarrollo ha sido en la oficina y hoy estoy trabajando a través de VPN, así que quizás eso también tenga algo que ver con eso.

¿Algunas ideas?

TJ Kirchner
fuente
Aquí está el archivo package.json, si eso ayuda ... (suspiro), nvm, parece que no puedo pegarlo en ... demasiados caracteres.
TJ Kirchner
¿Qué estás corriendo?
wayne

Respuestas:

421

Según photusenigma en: https://github.com/npm/npm/issues/4815

Ejecute estos comandos en una ventana de terminal (nota: NO reemplace la parte $ USER ... ¡es un comando de Linux para obtener su usuario!):

sudo chown -R $USER ~/.npm
sudo chown -R $USER /usr/local/lib/node_modules

... y ... si está en una Mac (como yo), y aún ve errores después de ejecutar estos comandos, ejecute este último y debería estar bien. (Le recomiendo que pruebe probar antes de hacer esto. ¡No me gusta cambiar los permisos en el directorio ENTERO / usr / local a menos que realmente parezca necesario!)

sudo chown -R $USER /usr/local
alexoviedo999
fuente
77
Trabajó para mí, gracias! Sin embargo, mi carpeta node_modules estaba en un lugar diferente, tal vez esto ayude a alguien mássudo chown -R `whoami` /usr/lib/node_modules/
Justen
44
Curiosamente, recursivo chownno cambió los permisos ~/.npm/_lockspara mí. sudo chown -R myname ~/.npm/_locks
Obtuve el
77
Tenga en cuenta que esta solución no es buena para plataformas de múltiples usuarios. El primer comando está bien, el segundo convierte a un usuario estándar en propietario de los archivos del sistema. / usr / local / lib / node_modules solo es usado por npm con la opción --global, eso significa usar también sudo. Desafortunadamente, algunos scripts de instalación que usan npm mezclan comandos npm globales y no globales ... Creando este desastre.
Fafaman
55
De acuerdo, todo lo que necesitas es el primer comando. Evite los demás, ya que esos no deberían ser propiedad de su usuario.
pyrospade
2
¿Hay alguna manera de revertir los "efectos" de la segunda línea sudo chown -R $USER /usr/local/lib/node_modules? Lo corrí antes de leer que no es una buena idea ..
shaneparsons
153

Trabajé con un compañero de trabajo esta tarde y descubrí cuál era el problema. Mi carpeta ".npm" en mi directorio personal era propiedad del usuario root en lugar de mí. No estoy seguro de qué pasó para causar eso. Tal vez instalé node o npm como administrador raíz en un punto. En cualquier caso, simplemente ejecuté sudo chown -R [username] .npmy finalmente pude ejecutar npm installcomandos de mis proyectos nuevamente.

TJ Kirchner
fuente
11
También ayuda si ejecuta el mismo comando ~/tmp/también, o cualquier ubicación que Node use como ubicación temporal
Jason
1
¡Gracias por su respuesta! Me ahorró un poco de dolor de cabeza ya que el mensaje de error es malo. Pero diré que npm debe estar haciendo esto de manera predeterminada porque estoy bastante seguro de que no lo instalé en la raíz. Y, para completar, debe indicar -R <nombre de usuario> .npm
crowmagnumb
Me alegro de poder ayudar :) Y, buena captura! Modificaré mi respuesta para decir eso.
TJ Kirchner
Salvavidas! Gracias
Matthew Cullum
21

En mi caso, el problema era invocar npm con un usuario que no tiene un directorio HOME, por lo que, por ejemplo, el siguiente comando fallará:

sudo -u someUser npm install

La solución es proporcionar un directorio HOME, donde someUsertenga acceso de escritura:

sudo -u someUser HOME=/some/directory npm install
Bjarke Walling
fuente
Elegido porque esto realmente funcionó para mí, así que felicitaciones y gracias. Estoy implementando la producción y el usuario ni siquiera tenía un directorio .npm (que pude encontrar, de todos modos)
Stuart Watt
Funciona en ChromeOS con el usuario "chronos".
Kyle Coberly
Pude evitar esto especificando sudo -u someUser -i, que inicia un nuevo shell de inicio de sesión. Investigué esto un poco más y el código de almacenamiento en caché en npm usa la variable npm.cache, que supongo es la predeterminada $HOME/.npm/. sudo también puede tener un comportamiento diferente con lo que se configura la variable HOME dependiendo de la configuración y la presencia o ausencia de opciones de línea de comando.
jgibson
11

Tuve el mismo problema y lo solucionó cambiando las persistencias según la respuesta aceptada:

sudo chown -R $USER ~/.npm

Sin embargo, el segundo comando debe evitarse ya que degrada los permisos de un recurso del sistema ( sudo chown -R $USER /usr/local/lib/node_modules). No es Buena idea.

Para el registro: "usr" en /usr/localsignifica recursos del sistema Unix .

Chris
fuente
1
Probablemente debería ser un comentario sobre la respuesta aceptada en lugar de ser publicado como una nueva respuesta.
Kmeixner
El autor de esa respuesta lo sabe pero no ha actualizado su respuesta, por lo que digo que una por separado está muy justificada.
Gui Prá
4

Nada de esto funcionó para mí. Tuve que ejecutar literalmente como root haciendo lo siguiente:

sudo su -
sudo npm install forever -g

Luego el paquete instalado en Linux Ubuntu 14.04.

occasl
fuente
¡Realmente no deberías ejecutar npm como root!
Antoine 'hashar' Musso
1

Mi solución:

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

en mi caso fue:

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

Pero estaba teniendo el mismo problema, finalmente después

npm cache clean

funcionó !

mayonesa
fuente
0

Tuve el mismo problema e intenté arreglar el permiso / propiedad de los archivos y directorios relacionados con npm durante horas, pero no tuve suerte con eso.

De repente descubrí que tenía un ~/.npmrcarchivo con cacheentrada que apuntaba a un directorio no existente. Se eliminó esa cachepropiedad para usar la ubicación de caché predeterminada y ahora está resuelta.

cheolgook
fuente
0

Descargo de responsabilidad

Soy un usuario de Windows Sin embargo, mi equipo y yo nos hemos encontrado con varios problemas relacionados con los errores de instalación de npm.

Problemas

La siguiente es una lista de lecciones aprendidas y una posible solución radical que siempre nos ha rescatado:

  1. node_modules , el directorio de instalación local de npm queda protegido contra modificaciones por una deficiencia del sistema operativo, como la incapacidad para procesar rutas de más de 255 caracteres.
  2. Si la carpeta se borra por medio de una herramienta de línea de comando, aún puede aparecer como si la carpeta existiera en el explorador que al intentar acceder da una serie de errores de permiso.
  3. Dependiendo de su antivirus y / o administrador de políticas local, es posible que pueda crear la carpeta node_modules y luego relegarle el acceso o los permisos, lo que provocará una serie de errores de instalación.
  4. Habilite los registros npm para obtener más información sobre posibles problemas con:

    npm install --loglevel verbose

Radical

Instalar rimraf a nivel mundial

 npm install rimraf -g

Ejecute rimraf en node_modules :

rimraf yourDir/node_modules

Entonces intente ejecutar:

npm install

¡Advertencia!

O la falta de ello. Tenga mucho cuidado con lo que sigue al comando rimraf. No hay advertencias, no hay indicaciones, no hay nada. Simplemente borra el directorio de la fase de limpieza de la tierra, como si nunca hubiera estado allí. Pruébalo bajo tu propio riesgo.

Wilmer Saint
fuente