Si conoce JavaScript, entonces sabe acerca de NPM; es el administrador de paquetes predeterminado para Node.js, que es un entorno de ejecución de código abierto. Los desarrolladores usan NPM 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 fácilmente el código 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 en él. 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 «errores de lanzamiento de NPM sin sudo» que a veces enfrentan los desarrolladores. Si encuentra el error, podría verse así:
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 está intentando ejecutar falla. Sin embargo, cuando lo intentas con «sudo», obtienes 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 la instalación de NPM.
Te puede interesar:Subcadenas en Bash¿Instaló NPM usando privilegios de root? Ésta 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 enumero a continuación.
Solución 1: instalar a través de NVM
Contenido
«Todo está seguro con permisos de root» no es un cliché y por una buena razón. Cuando instala y ejecuta node en una máquina de desarrollo con privilegios de root, no lo morderá hasta que intente instalar otros paquetes con él y enfrente el problema en discusión.
Node Version Manager, 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:
Te puede interesar:Cómo desinstalar Node.js de Mac OSX- Encienda una terminal e ingrese el siguiente comando para eliminar todos los módulos de node globales:
$ npm ls -gp --depth=0 | awk -F/ '/node_modules/ && !//npm$/ {print $NF}' | xargs npm -g rm
- Ve a la repositorio git oficial de NVM y siga las instrucciones allí para instalar NVM. Para asegurarse de que NVM se haya instalado correctamente, ingrese el comando a continuación y vea si el resultado es un número de versión:
$ nvm --version 0.28.0
Si se envió «nvm» a la consola, como se muestra arriba, entonces se ha instalado.
- Una vez que se haya asegurado de que NVM se haya instalado en su dispositivo, ejecute este comando para instalar el node:
$ 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 sea 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, encienda la terminal e ingrese el siguiente comando:
Te puede interesar:Probando el código de Node.js con Mocha y Chai$ sudo chown -R $(whoami) ~/.npm
los $(whoami)
parte tomará su nombre de usuario y lo colocará allí dentro del comando, lo que lo convertirá en el propietario de todos los archivos / carpetas en ~/.npm
.
Cuando se le solicite que proporcione 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 instalarlo globalmente con privilegios de root
Si es un usuario de Linux o OSX, también puede crear un directorio dedicado para contener su paquete global. Luego, puede configurar NPM y el node para encontrar los paquetes instalados globalmente por su cuenta. Para realizar una instalación global para un usuario específico (sin privilegios de root), siga estos pasos:
Te puede interesar:Argumentos de la línea de comandos en Node.js- Como primer paso, cree un directorio para los paquetes globales:
$ mkdir "${HOME}/.npm-packages"
- Vaya al archivo «~ / .npmrc» y agregue esto al final:
prefix=${HOME}/.npm-packages
- Vaya a sus archivos «.bashrc» o «.zshrc» y agregue:
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 de manual y los 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 los archivos «.profile» o «bash_profile». En tal escenario, agregue la siguiente línea al final de cualquiera de los archivos mencionados anteriormente para asegurarse de que el terminal también incluya el archivo «.bashrc»:
$ source ~/.bashrc
Si no desea realizar manualmente los pasos anteriores, puede consultar el agradable script de shell npm-g_nosudo, que realiza todos estos pasos automáticamente.
Te puede interesar:Enlaces simbólicos en Unix / LinuxConclusió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 una 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 cambiar fácilmente entre múltiples versiones de Node / NPM mientras desarrolla. Ha sido un salvavidas para mí, por decir lo menos.
¡Cuéntanos en los comentarios cómo te fueron las cosas!
Te puede interesar:Leer y escribir archivos CSV con Node.js