npm / yeoman instalan generator-angular sin sudo

Intenté instalar generator-angularjs usando Yo ( Yoeman ) sin sudo :

npm install -g generator-angular 

Yo obtengo:

 Error: EACCES, mkdir '/usr/lib/node_modules/generator-angular' 

Cuando sudo yo , me dice que no debería usar sudo (lo que es perfectamente comprensible).

Tengo un directorio ~/node_modules – ¿por qué no instala sus paquetes allí?

    Los generadores están diseñados para instalarse globalmente. De lo contrario, siempre debe instalar el generador que está a punto de usar en cada proyecto, que es innecesariamente doloroso. Además, no puede ver el encantador menú que enumera todos los generadores disponibles (a menos, por supuesto, que los instale todos localmente):

    yo

    Configuración de npm para instalación global

    Entonces, ¿cómo hacemos que npm instale paquetes globalmente? Como dijiste correctamente, nunca deberías ejecutar yo con sudo. Hay muchas soluciones diferentes para este problema y puede pasar horas discutiendo sus pros y contras religiosamente.

    Personalmente, no me gusta instalar mis paquetes de usuario en la carpeta global /usr/ . /usr/ es para software que se comparte entre todos los usuarios en la computadora. Incluso si solo está utilizando la máquina, todavía hay buenas razones para respetar la forma en que está diseñada la jerarquía del sistema de archivos Unix. Por ejemplo, si decide en un momento borrar la instalación de su nodo completo.

    Mi forma preferida de permitir que npm instale paquetes globalmente sin salirse de $HOME es establecer un prefijo de nodo local . Esto es tan fácil como correr

     echo 'prefix = ~/.node' >> ~/.npmrc 

    en tu caparazón local. Después de eso, quiere ajustar su $ PATH, para apuntar al nuevo destino de instalación para ejecutables de nodos globales ajustando la configuración de su shell favorito. Ej. Agregando

     export PATH="$PATH:$HOME/.node/bin" 

    a su ~/.bashrc . Después de eso, puede ejecutar felizmente la npm install -g generator-angular sin sudo, sin encontrarse con conflictos de permisos y, si algo está completamente roto y desea comenzar desde cero, todo lo que necesita hacer es eliminar su directorio ~/.node .

    Gracias a @passy finalmente logré que esto funcionara en ubuntu 13.04 (en caso de que alguien tenga problemas de configuración similares) con lo siguiente:

     sudo apt-get update sudo apt-get install python-software-properties python g++ make sudo add-apt-repository ppa:chris-lea/node.js sudo apt-get update sudo apt-get install nodejs 

    tratando de correr:

     npm install -g yo 

    resultó en

     Error: EACCES, mkdir '/usr/lib/node_modules/yo' 

    Reparado usando:

     echo prefix = ~/.node >> ~/.npmrc echo 'export PATH=$HOME/.node/bin:$PATH' >> ~/.bashrc . ~/.bashrc 

    Corriendo:

     yo webapp 

    resultó en:

     Error: EACCES, permission denied '/home/username/.config/configstore/update-notifier-yo.yml' 

    Reparado usando:

     sudo chown yourusername:yourusername /home/yourusername/.config/configstore/update-notifier-yo.yml 

    hola en mi caso (en ubuntu 12.04), la adición de prefijo en ~ / .npmrc no cambió nada.

    si es así, construya el paquete del nodo usted mismo e instálelo en / opt / node o /home/user/.node .

    Tuve un error casi idéntico que involucraba un .yo-rc.json rogue .yo-rc.json en mi directorio raíz de un proyecto que instalé anteriormente. Yeoman estaba cambiando cwd del directorio de instalación al directorio raíz a la mitad de la instalación, pero solo obtenía el error de permisos EACCESS sin ningún detalle de que el directorio de instalación fuera / . .yo-rc.json esto, e involucré la depuración a través de la fuente Yeoman, pero finalmente aprendí que Yeoman buscará a través del árbol de directorios hasta que encuentre un .yo-rc.json , y generará el código allí llamando a chdir a la nueva ubicación.

    Yeoman debería tal vez verificar que el usuario tenga permisos de escritura para el directorio. Alternativamente, podría mencionar en el resultado que el cwd ha cambiado, o imprimir el nombre del directorio de instalación si encuentra que .yo-rc.json es diferente de cwd.

    El comando para encontrar archivos rogue .yo-rc.json

    sudo find / -name .yo-rc.json

    De la página de inicio de yoeman aparece el comando:

     yo doctor 

    En mi caso, $ NODE_PATH (que en mi caso, Ubuntu 14.04, se define en /etc/profile.d) no es lo mismo que npm root. Agregar el nodo npm en $ NODE_PATH resuelve el problema.

    He estado tratando de hacer que yeoman juegue bien con mi caja de vagrant y esto es lo que tuve que hacer para instalar paquetes npm globalmente sin sudo en ubuntu :

    1. Crea el directorio para almacenar paquetes globales

    $ mkdir "${HOME}/.npm-packages"

    2. Indique a npm dónde colocar los paquetes instalados globalmente

    Inserta este fragmento en tu archivo ~/.npmrc :

    prefix=${HOME}/.npm-packages

    3. Asegúrese de que npm pueda localizar los binaries instalados, etc.

    Inserta este fragmento en tu .bashrc/.zshrc :

     NPM_PACKAGES="${HOME}/.npm-packages" PATH="$NPM_PACKAGES/bin:$PATH" // `unset` `manpath` to allow inheritance from `/etc/manpath` with // the `manpath` command unset MANPATH // remove this line if you have previously modified `manpath` export MANPATH="$NPM_PACKAGES/share/man:$(manpath)" 

    4. Ejecute la siguiente o reinicie la terminal

    $ source ~/.bashrc

    Espero que esto ayude a cualquiera que se encuentre en una situación similar.