Pregunta npm arroja un error sin sudo


Acabo de instalar node y npm a través del paquete en nodejs.org y cada vez que trato de buscar o instalar algo con npm arroja el siguiente error, a menos que sudo el comando. Tengo la sensación de que esto es un problema de permisos Ya soy el administrador.

npm ERR! Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR!  { [Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/Users/chietala/.npm/-/all/.cache.json' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

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

1017
2018-04-22 15:35


origen


Respuestas:


Esto parece un problema de permisos en su directorio de inicio. Para reclamar la propiedad de la .npm ejecución de directorio:

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

1864
2018-04-22 16:11



Los permisos que usaste al instalar Node serán necesarios cuando hagas cosas como escribir en tu npm directorio (npm link, npm install -g, etc.)

Es probable que haya ejecutado la instalación del nodo con permisos de raíz, por eso la instalación del paquete global le pide que sea root.


Solución 1: NVM

No piratear con permisos, instale el nodo de la manera correcta.

En una máquina de desarrollo, no debe instalar y ejecutar un nodo con permisos de raíz; de lo contrario, cosas como npm link, npm install -g necesitará los mismos permisos.

NVM (Node Version Manager) le permite instalar Node sin permisos de root y también le permite instalar muchas versiones de Node para jugar fácilmente con ellos. Perfecto para el desarrollo.

  1. Desinstalar nodo (probablemente se requiera un permiso raíz). Esta podría ayudarte
  2. Luego instala NVM siguiendo instrucciones en esta página.
  3. Instalar el nodo a través de NVM: nvm install node

Ahora npm link, npm install -g ya no será necesario que seas root

Editar: Ver también https://docs.npmjs.com/getting-started/fixing-npm-permissions


Solución 2: Instalar paquetes globalmente para un usuario dado

No piratear con permisos, instale paquetes npm globalmente de la manera correcta.

Si está en OSX o Linux, puede crea un directorio dedicado de usuario para tu paquete global y configuración npm y node para saber cómo encontrar paquetes instalados globalmente

Revisa este gran artículo para obtener instrucciones paso a paso sobre la instalación global de módulos npm sin sudo.

Ver también: documentación de npm en Reparar permisos npm.


482
2018-06-25 09:05



También necesitarás el permiso de escritura en node_modules directorio:

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

386
2017-08-24 03:23



Me encontré con esto al instalar Recess (https://github.com/twitter/recess) para compilar mi CSS para Bootstrap 3.

Al instalar el recreo:

-npm install recess -g
  1. Necesita desbloquear permisos en su home directorio, como Noah dice:

    sudo chown -R `whoami` ~/.npm
    
  2. También necesita permisos de escritura para el node_modules directorio, como Xilo dice, entonces si todavía no está funcionando, intente:

    sudo chown -R `whoami` /usr/local/lib/node_modules
    
  3. Si todavía está viendo errores, también puede necesitar correcto /usr/local permisos:

    sudo chown -R `whoami` /usr/local
    

Tenga en cuenta que como se indica en esta publicación  /usr/local/ no es realmente un directorio de sistema si está en una Mac, por lo tanto, esta respuesta es realmente "segura" para los usuarios de Mac. Sin embargo, si estás en Linux, mira Christopher WillA continuación se ofrece una respuesta para una solución amigable para el sistema de varios usuarios, pero más compleja.


57
2017-10-03 23:16



Cambiar el propietario en las carpetas "system-global" es un truco. En una nueva instalación, configuraría NPM para utilizar una ubicación ya de escritura para programas "user-global":

npm config set prefix ~/npm

Luego, asegúrese de agregar esa carpeta a su ruta:

export PATH="$PATH:$HOME/npm/bin"

Ver @ErikAndreas' responder a Los módulos de NPM no se instalarán globalmente sin sudo  y guía paso a paso más larga por @sindresorhus con también conjuntos $MANPATH.


49
2018-05-27 12:36



Otras respuestas sugieren cambiar las propiedades o los permisos de los directorios del sistema a un usuario específico. Disiento mucho de hacerlo, ¡esto puede volverse muy incómodo y puede estropear todo el sistema!

Aquí hay un enfoque más genérico y seguro que también admite multiusuario.

Cree un nuevo grupo para usuarios de nodos y agregue los usuarios necesarios a este grupo. Luego, establezca la propiedad de los archivos / directorios dependientes del nodo en este grupo.

# Create new group
sudo groupadd nodegrp 

# Add user to group (logname is a variable and gets replaced by the currently logged in user)
sudo usermod -a -G nodegrp `logname`

# Instant access to group without re-login
newgrp nodegrp

# Check group - nodegrp should be listed as well now
groups

# Change group of node_modules, node, npm to new group 
sudo chgrp -R nodegrp /usr/lib/node_modules/
sudo chgrp nodegrp /usr/bin/node
sudo chgrp nodegrp /usr/bin/npm

# (You may want to change a couple of more files (like grunt etc) in your /usr/bin/ directory.)

Ahora puede instalar fácilmente sus módulos como usuario

npm install -g generator-angular

Algunos módulos (gruñido, glorieta, yo, etc.) aún tendrán que instalarse como raíz. Esto se debe a que crean enlaces simbólicos en / user / bin /.

Editar

3 años más tarde, recomendaría usar Administrador de versión de nodo. Te asegura mucho tiempo y problemas.


35
2018-01-09 11:58



los documentación oficial sobre cómo arreglar npm install permisos con un EACCES el error se encuentra en https://docs.npmjs.com/getting-started/fixing-npm-permissions.

Me encontré con este problema después de una nueva instalación de nodo utilizando el .pkg instalador en OSX. Aquí hay algunas respuestas excelentes, pero aún no veo un enlace a npmjs.com.

Opción 1: cambiar el permiso al directorio predeterminado de npm

  1. Encuentre la ruta al directorio de npm:

    npm config get prefix
    

Para muchos sistemas, esto será / usr / local.

ADVERTENCIA: Si la ruta mostrada es solo / usr, cambiar a opcion 2.

  1. Cambie el propietario de los directorios de npm por el nombre del usuario actual (¡su nombre de usuario!):

    sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
    

    Esto cambia los permisos de las subcarpetas utilizadas por npm y algunas otras herramientas (lib / node_modules, compartimientoy compartir)

Opción 2: cambiar el directorio predeterminado de npm a otro directorio

Hay momentos en los que no desea cambiar la propiedad del directorio predeterminado que utiliza npm (es decir, / usr), ya que esto podría causar algunos problemas, por ejemplo, si está compartiendo el sistema con otros usuarios.

En cambio, puede configurar npm para usar un directorio diferente por completo. En nuestro caso, este será un directorio oculto en nuestra carpeta de inicio.

  1. Haga un directorio para instalaciones globales:

    mkdir ~/.npm-global
    
  2. Configure npm para usar la nueva ruta del directorio:

    npm config set prefix '~/.npm-global'
    
  3. Abra o cree un archivo ~ / .profile y agregue esta línea:

    export PATH=~/.npm-global/bin:$PATH
    
  4. De vuelta en la línea de comando, actualice las variables de su sistema:

    source ~/.profile
    

11
2018-01-23 19:46



¡¡¡Cuidado!!!  ¡¡¡Cuidado!!!  ¡¡¡Cuidado!!! 

chown o chmod es NO la solución, debido al riesgo de seguridad.

En cambio, haz esto, hazlo:

Primero compruebe, donde punto npm, si llama:

npm config get prefix

Si se devuelve / usr, puede hacer lo siguiente:

mkdir ~/.npm-global
export NPM_CONFIG_PREFIX=~/.npm-global
export PATH=$PATH:~/.npm-global/bin

Esto crea un npm-Direktory en su Home-Directory y lo señala con npm.

Para que estos cambios sean permanentes, debe agregar el comando de exportación a su .bashrc:

echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=$PATH:~/.npm-global/bin" >> ~/.bashrc

11
2017-12-30 11:18



Como si necesitamos más respuestas aquí, pero de todos modos ..

Sindre Sorus tiene una guía Instalar paquetes npm globalmente sin sudo en OS X y Linux delineando cómo instalar limpiamente sin jugar con permisos:

Aquí hay una forma de instalar paquetes globalmente para un usuario dado.

  1. Crea un directorio para tus paquetes globales

    mkdir "${HOME}/.npm-packages"
    
  2. Haga referencia a este directorio para uso futuro en su .bashrc / .zshrc:

    NPM_PACKAGES="${HOME}/.npm-packages"
    
  3. Indique a npm dónde almacenar su paquete instalado globalmente. En tus $HOME/.npmrc archivo agregar:

    prefix=${HOME}/.npm-packages
    
  4. Asegúrese de que el nodo los encuentre. Agregue lo siguiente a su .bashrc / .zshrc:

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
    
  5. Asegúrese de que encontrará binarios instalados y páginas man. Agregue lo siguiente a su .bashrc/.zshrc:

    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
    MANPATH="$NPM_PACKAGES/share/man:$(manpath)"
    

Revisa npm-g_nosudo para hacer los pasos anteriores automágicamente

Revisar la fuente de esta guía para las últimas actualizaciones.


10
2018-01-20 09:35



Cuando ejecuta npm install -g somepackage, puede recibir un error EACCES que le pide que ejecute el comando nuevamente como usuario / administrador. Es un problema de permisos.

Sus fácil de arreglar, abra su terminal (Aplicaciones> Utilidades> Terminal)

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

** Recomiendo encarecidamente que no utilice la gestión de paquetes con sudo (sudo npm -g install something), ya que puede obtener algunos problemas más adelante **

Referencia: http://foohack.com/2010/08/intro-to-npm/


8
2017-10-20 07:22



Para Mac (adoptado de la respuesta de Christoper Will)

Mac OS X 10.9.4

  1. Preferencia del sistema> Usuarios y grupos> (desbloquear)> presionar +:

    Nueva cuenta> "Grupo"
       Nombre de la cuenta: nodegrp

    Después de crear el grupo, marque el usuario para ser incluido en este grupo

  2. sudo chgrp -R nodegrp / usr / local / lib / node_modules /
          sudo chgrp nodegrp / usr / bin / node
          sudo chgrp nodegrp / usr / bin / npm
          sudo chown -R $ (whoami): nodegrp ~ / .npm


6
2017-09-10 05:16