NPM EACCES

Me toco probar el despliegue de aplicaciones NodeJS donde necesitaba instalar paquetes globales, instalar paquetes NodeJS globales en el sistema operativo no parece ser una buena práctica, entonces encontramos una solución a este problema.

Al ejecutar el comando:

1$ npm install -g <NOMBRE_PAQUETE>

Se presento un problema de permisos npm ERR! code EACCES y para solucionar el problema de forma inmediata era ejecutarlo con sudo, esta práctica es común pero no es lo que buscamos.

Buscando encontré que la solución para evitar el comando sudo es cambiar manualmente el directorio predeterminado de NPM.

Creación del Nuevo Directorio

Creamos una carpeta nueva donde se instalarán los nuevos programas:

1$ mkdir ~/.npm-global

Configure NPM para la Nueva Ruta del Directorio

Con el comando npm cambiamos la ruta del directorio de instalación de paquetes:

1$ npm config set prefix '~/.npm-global'

Variables de Entorno

En algunos casos, hay guías que te sugieren crear un archivo .profile para crear la variable, en este ejemplo agregamos la variable al archivo .bashrc:

1$ echo 'NPM_CONFIG_PREFIX=~/.npm-global' >> ~/.bashrc

Actualizamos Variables

Actualizamos las variables con el siguiente comando:

1$ source ~/.bashrc

Probamos la Instalación sin sudo

Para probar la nueva funcionalidad ejecutamos el mismo comando sin anteponer sudo:

1$ npm install -g <NOMBRE_PAQUETE>

Referencias

Traducciones: