NPM arroja un error sin Sudo

Si conoce JavaScript, entonces conoce NPM; es el administrador de paquetes predeterminado para Node.js, que es un entorno de tiempo de ejecución de código abierto. Los desarrolladores usan N...

Si conoce JavaScript, entonces conoce NPM; es el administrador de paquetes predeterminado para Node.js, que es un entorno de tiempo de ejecución de código abierto. Los desarrolladores usan MNP porque no solo proporciona una manera fácil de mantener el código, sino que también les ayuda cuando tienen que compartirlo con otros desarrolladores que pueden reutilizar el código fácilmente. durante su propio desarrollo.

Un archivo NPM o un paquete NPM no es más que un código reutilizable separado lógicamente que está organizado como un directorio con algunos archivos. Uno de los archivos que siempre encontrará es el archivo "package.json", que contiene metadatos sobre el paquete, entre otras cosas. La instalación de NPM a menudo puede generar problemas extraños si no se realiza correctamente. En este artículo hablaré sobre el problema de "NPM lanzando errores sin sudo" que a veces enfrentan los desarrolladores. Si encuentra el error, podría ser algo como esto:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
npm ERR! Error: EACCES, open '/Users/scott/.npm/-/all/.cache.json'
npm ERR!  { [Error: EACCES, open '/Users/scott/.npm/-/all/.cache.json']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/Users/scott/.npm/-/all/.cache.json' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 15.5.0
npm ERR! command "node" "/usr/local/bin/npm" "search" "babel"
npm ERR! cwd /Users/scott
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! path /Users/scott/.npm/-/all/.cache.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, open '/Users/scott/.npm/-/all/.cache.json'
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/scott/npm-debug.log
npm ERR! not ok code 0

Básicamente, cada vez que intenta instalar o buscar algo a través de NPM, obtiene una larga lista de errores inútiles y el comando que intenta ejecutar falla. Sin embargo, cuando lo intenta con "sudo", obtiene el resultado deseado. Esto sucederá incluso si ha iniciado sesión como administrador. Este problema normalmente ocurre cuando hay algún problema con los permisos y privilegios relacionados con su instalación de NPM.

¿Instalaste NPM usando privilegios de root? Esa puede ser una de las razones por las que necesita privilegios de root cada vez que ejecuta un comando. O esto también podría deberse a problemas de permisos dentro de su directorio de inicio, en cuyo caso tendrá que recuperar la propiedad, que es una de las soluciones que he enumerado a continuación.

Solución 1: instalar a través de NVM

"Todo está seguro con permisos de root" no es un cliché y por una buena razón. Cuando instala y ejecuta el nodo en una máquina de desarrollo con privilegios de root, no lo molestará hasta que intente instalar otros paquetes con él y enfrente el problema que se está discutiendo.

El Administrador de versiones de nodos, o NVM, es una herramienta que permite a los desarrolladores instalar tantas versiones de Node como necesiten y sin necesidad de privilegios de root. Recomiendo usarlo y realizar una reinstalación después de desinstalar la instalación actual de NPM. Si esta es la ruta que desea tomar, siga estos pasos:

  1. Inicie una terminal e ingrese el siguiente comando para eliminar todos los módulos de nodos globales:

    1
    
    $ npm ls -gp --depth=0 | awk -F/ '/node_modules/ && !/\/npm$/ {print $NF}' | xargs npm -g rm
    
  2. Vaya al repositorio oficial de NVM git y siga las instrucciones para instalar NVM. Para asegurarse de que NVM se haya instalado correctamente, ingrese el siguiente comando y vea si la salida es un número de versión:

    1
    2
    
    $ nvm --version
    0.28.0
    

    If "nvm" was output to the console, as shown above, then it is has been installed.

  3. Una vez que se haya asegurado de que NVM se haya instalado en su dispositivo, ejecute este comando para instalar el nodo:

    1
    
    $ nvm install stable
    

Una vez que haya terminado, intente ejecutar npm link o realice una instalación global de NPM y verá que ya no necesita privilegios de root para que funcione.

Solución 2: Tomar posesión

Como mencioné anteriormente, la mayor parte del tiempo este problema es causado por problemas en los permisos de su directorio de inicio. Si tiene dudas de que este no es su caso, no se preocupe, puede intentarlo de todos modos porque incluso si no es la causa, no le hará ningún daño.

Una vez que esté configurado, inicie el terminal e ingrese el siguiente comando:

1
$ sudo chown -R $(whoami) ~/.npm

La parte $(whoami) tomará su nombre de usuario y lo colocará dentro del comando, convirtiéndolo en el propietario de todos los archivos/carpetas en ~/.npm.

Cuando se le solicite su contraseña, continúe. Una vez que haya terminado, intente instalar o buscar a través de NPM nuevamente y vea si el problema persiste; no debería

Solución 3: desinstale todos los módulos NPM y vuelva a instalarlos globalmente con privilegios de root

Si es usuario de Linux u OSX, también puede crear un directorio dedicado para guardar su paquete global. Luego puede configurar NPM y el nodo para encontrar los paquetes instalados globalmente por su cuenta. Para hacer una instalación global para un usuario específico (sin privilegios de root), siga estos pasos:

  1. Como primer paso, cree un directorio para los paquetes globales:

    1
    
    $ mkdir "${HOME}/.npm-packages"
    
  2. Vaya al archivo "~/.npmrc" y agregue esto al final:

    1
    
    prefix=${HOME}/.npm-packages
    
  3. Vaya a sus archivos ".bashrc" o ".zshrc" y agregue:

    1
    2
    3
    4
    5
    6
    7
    
    NPM_PACKAGES="${HOME}/.npm-packages"
    PATH="$NPM_PACKAGES/bin:$PATH"
    
    # Unset manpath so we can inherit from /etc/manpath via the `manpath` command
    unset MANPATH # delete if you already modified MANPATH elsewhere in your config
    
    export MANPATH="$NPM_PACKAGES/share/man:$(manpath)"
    

Esto garantizará que NPM encuentre fácilmente las páginas man y los archivos binarios instalados.

Nota: Para los usuarios de Mac, el archivo ".bashrc" a menudo no existe y el terminal obtiene sus parámetros de otros archivos como ".profile" o "bash_profile". En tal escenario, agregue la siguiente línea al final de cualquiera de los archivos antes mencionados para asegurarse de que el terminal también incluya el archivo ".bashrc":

$ fuente ~/.bashrc

Si no desea realizar manualmente los pasos anteriores, puede consultar el script de shell agradable [npm-g_nosudo] (https://github.com/glenpike/npm-g_nosudo), que realiza todos estos pasos automáticamente para tú.

Conclusión

Estoy seguro de que después de probar una de las soluciones anteriores, ya no debería tener problemas con este error. Si tiene la opción, le recomiendo usar NVM para instalar diferentes versiones de Node/NPM. No solo resolverá su problema con el uso de NPM con sudo, sino que también le permitirá instalar y alternar fácilmente entre varias versiones de Node/NPM mientras desarrolla. Ha sido un salvavidas para mí, por decir lo menos.

¡Cuéntanos en los comentarios cómo te fue todo!