Instalar paquetes npm sin usar sudo.

Alvison Hunter
JavaScript Nicaragua
4 min readApr 26, 2020

Un tedioso proceso que puede ser evitado con un par de comandos.

Error: EACCES: permission denied, open ‘/Users/alvisonhunter/.npm/_cacache/index-v5/1f/33

Admitámoslo mis queridos colegas, en mas de alguna ocasión al trabajar ya sea con Javascript Frameworks o alguna de sus librerias, o con cualquier otro lenguaje, nos hemos visto en la necesidad de resolver un cotidiano conflicto cuando queremos instalar dependencias para algún repo que hemos clonado, o para algún paquete que queremos probar, o para algún caso que no falta en la ensalada de dilemas que enfrentamos cuando estamos en el armado de nuestro proyecto.

Qué hacemos entonces? Bueno, lo primero es respirar, hallaremos miles de respuestas en el vasto mundo de San Google pero mientras no se prueben no tendremos la certeza que si dichas soluciones encontradas funcionan o no.

Cuál es el problema que esto conlleva? Sencillo, nuestras máquinas no son simples juguetes de carton que podemos reemplazar recortándolos de nuevo en cartulina y forrándolos con papel de aluminio, por tanto no podemos caer en el error de estar experimentando con ellas sin tener una base de lo hecho.

Generalmente el dilema más común es el famoso EACCESS, o un simple error de acceso. Citemos el ejemplo cotidiano con el comando que cito acá abajo:

npm install <package_nacatamal>

Se que cuando nos pasa eso, mas de alguno de ustedes a sentido la grandísima necesidad de correr este comando combinado con el Rambo de los que hoy en día usamos sistemas operativos del tipo UNIX, ese sujeto que permite a los usuarios correr programas con privilegios de seguridad en otro usuario, como el super usuario. Hablamos nada mas y nada menos que de Sudo […sigh].

Investigando un poco sobre sus comienzos me di cuenta que antes se usaba su version “superuser do” o “substitute user do” porque anteriormente sudo había sido diseñado solo para correr comandos como el gran super usuario.

Es meritorio mencionar que para correr aplicaciones de administración en Linux contamos con dos formas. La mas común que muchos conocemos es el “root user” ( o el útil comando su) o simplemente nos aprovechamos al máximo de los privilegios de Sudo invocándolo en el momento que lo necesitemos, usándolo como una especie de Bati-señal del departamento de policía de Gotham City para tener accesos privilegiados en nuestro OS.

Cabe también citar que para muchos no es nuevo que algunas distribuciones habilitan dicho root user ( por ejemplo el Fedora, Red Hat, openSuSE), mientras que otros simplemente no lo hace(Ubuntu y el Debian). Siempre hay pro y contras de cada uno en dichas distribuciones pero no soy mega experto en ninguna de ellas así que solo mencionaré esto en este articulo.

Sin embargo, para ser mas objetivos con lo de las buenas practicas de seguridad en nuestro amado Linux, y para no sentirnos culpables por no hacer las cosas de la manera correcta, les sugiero que prueben hacer lo siguiente para tratar de arreglar este ya acostumbrado EACCESS Error que no es agradable para nadie. Me gustaría agregar que en lo personal considero que los modelos de npm deberían ser instalados sin el consabido mago Sudo.

Muchas veces al correr el comando npm update me ha ayudado en algunas ocasiones a resolver este tipo de casos, pero sino haremos lo siguiente:

Primero vamos a colocarnos como el propietario (owner) de el directorio de ~/.npm. El comando siguiente hará este trabajo sucio por ustedes, chic@s!

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

Listo! Eso debería ser como hacer un huevo cocido pero, que pasa si esto no funciona? Bueno la segunda opción que aprendi cuando tuve problemas como estos fue que me coloque como el propietario (owner) del directorio de los módulos de Node también de esta forma:

sudo chown -R $(whoami) /usr/local/lib/node_modules

Listo! Ahora si podrás proceder a instalar esos tan ansiados paquetes con tu npm sin necesidad del llamar a Superman, digo al gran emperador sudo!

Alternativamente se podrían auxiliar usando NVM el cual es un administrador de versiones para node.js, diseñado para ser instalado por usuario e invocado por shell. nvm funciona en cualquier shell compatible con POSIX (sh, dash, ksh, zsh, bash), en particular en estas plataformas: unix, macOS y Windows WSL.

Momento! Antes de cerrar este articulo quiero dejar mi humilde pero sincero disclaimer: Aunque a mi me han funcionado estos comando, no me hago responsable de lo que ellos hagan en tu maquina, les invito encarecidamente a leer un poco mas sobre ellos primeramente antes de ejecutarlos en sus computadoras.

Antes de Marcharte, quisiera que rapidamente leas esto:

👏 5 Claps si disfrutaste este articulo, así podré motivarme a escribir mas!
🤔 Comenta si tienes algo que decir, para mí es importante saber tu opinión.
🙂 Click en seguir Alvison para que estes al tanto de mis nuevos artículos!

Luego llega la paz cuando vemos que toda la tormenta de EACCESS ya ha pasado!

Gracias por leer mi articulo, nos vemos hasta la próxima!

--

--

Alvison Hunter
JavaScript Nicaragua

JavaScript & Python Developer | Managing Partner @CodeCraftersLabs. Linguist Enthusiast & Music Connoisseur | Husband | Proud Father of 2 brave warriors.🙈🙉🙊