npm / yeoman instala gerador-angular sem sudo

Tentei instalar o gerador-angularjs usando Yo ( Yoeman ) sem sudo :

npm install -g generator-angular 

Eu recebo:

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

Quando eu digito sudo yo , você me diz que eu não devo usar o sudo (o que é perfeitamente compreensível).

Eu tenho um diretório ~/node_modules – por que você não instala seus pacotes lá?

Os geradores são projetados para serem instalados globalmente. Caso contrário, você sempre terá que instalar o gerador que está prestes a usar em cada projeto, o que é desnecessariamente doloroso. Além disso, você não consegue ver o adorável menu yo que lista todos os geradores disponíveis (a menos que você os instale localmente):

yo

Configurando o npm para instalação global

Então, como podemos obter o npm para instalar pacotes globalmente? Como você disse corretamente, você nunca, nunca deve correr com o sudo. Existem muitas soluções diferentes para esse problema e você pode passar horas discutindo seus prós e contras religiosamente.

Eu pessoalmente não gosto de instalar meus pacotes de usuário na pasta global /usr/ . /usr/ é para software compartilhado entre todos os usuários no computador. Mesmo que seja apenas o uso da máquina, ainda há boas razões para respeitar a forma como a hierarquia do sistema de arquivos do Unix é projetada. Por exemplo, se você decidir em um ponto limpar toda a instalação do nó.

Minha maneira preferida de permitir que o npm instale pacotes globalmente sem sair do $HOME é definir um prefixo de nó local . Isso é tão fácil quanto correr

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

na sua concha local. Depois disso, você deseja ajustar o seu $ PATH, para apontar para o novo destino de instalação para os executáveis ​​do nó global, ajustando a configuração do seu shell favorito. Por exemplo, adicionando

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

para o seu ~/.bashrc . Depois disso, você pode executar o npm install -g generator-angular sem sudo, sem entrar em conflitos de permissão e se algo estiver completamente quebrado e você quiser começar do zero, tudo que você precisa fazer é remover o diretório ~/.node .

Graças a @passy eu consegui finalmente fazer isso funcionar no Ubuntu 13.04 (no caso de alguém estar tendo problemas de configuração semelhantes) com o seguinte:

 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 

tentando correr:

 npm install -g yo 

resultou em

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

Corrigido usando:

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

Corrida:

 yo webapp 

resultou em:

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

Corrigido usando:

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

oi no meu caso (no ubuntu 12.04), a adição de prefixo em ~ / .npmrc não mudou nada.

se for o caso, construa o pacote do nó sozinho e instale-o em / opt / node ou /home/user/.node .

Eu tive um erro quase idêntico envolvendo um arquivo .yo-rc.json desonesto no diretório raiz de um projeto que instalei anteriormente. O Yeoman estava trocando o cwd do diretório de instalação para o diretório-raiz no meio da instalação, mas estava exibindo apenas o erro de permissions EACCESS sem nenhum detalhe de que o diretório de instalação era / . Demorou muito tempo para descobrir o porquê disso, e envolveu a debugging através da fonte Yeoman, mas eu finalmente aprendi que Yeoman irá procurar na tree de diretórios até encontrar um .yo-rc.json , e gerar o código lá chamando chdir para o novo local.

O Yeoman talvez deva verificar se o usuário tem permissions de gravação para o diretório. Como alternativa, pode-se mencionar na saída que o cwd foi alterado ou imprimir o nome do diretório de instalação se ele encontrar .yo-rc.json é diferente de cwd.

O comando para localizar arquivos desonestos .yo-rc.json

sudo find / -name .yo-rc.json

A partir da página inicial do yoeman aparece o comando:

 yo doctor 

No meu caso, o $ NODE_PATH (que no meu caso, o Ubuntu 14.04, está definido em /etc/profile.d) não é o mesmo que o npm root. Adicionando a raiz npm em $ NODE_PATH resolva o problema.

Eu tenho tentado fazer com que o yeoman jogue bem com a minha checkbox vagrant e isso é o que eu tive que fazer para instalar pacotes npm globalmente sem sudo no ubuntu :

1. Crie o diretório para armazenar pacotes globais

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

2. Diga ao npm onde colocar quaisquer pacotes instalados globalmente

Insira este trecho no seu arquivo ~/.npmrc :

prefix=${HOME}/.npm-packages

3. Certifique-se de que o npm pode localizar binaries instalados, etc.

Insira este trecho no seu .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. Execute o seguinte terminal ou reinicie

$ source ~/.bashrc

Espero que isso ajude alguém que se encontra em uma situação semelhante.