npm / yeoman installa generatore-angular senza sudo

Ho provato ad installare generator-angularjs usando Yo ( Yoeman ) senza sudo :

npm install -g generator-angular 

Ottengo:

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

Quando sudo yo , yo mi dice che non dovrei usare sudo (che è perfettamente comprensibile).

Ho una directory ~/node_modules – perché non installa qui i suoi pacchetti?

    I generatori sono progettati per essere installati a livello globale. Altrimenti, devi sempre installare il generatore che stai per utilizzare in ogni progetto, il che è inutilmente doloroso. Inoltre, non riesci a vedere il delizioso menu yo che ti elenca tutti i generatori disponibili (a meno che, naturalmente, li installi tutti localmente):

    yo

    Impostazione di npm per l’installazione globale

    Quindi, come possiamo ottenere npm per installare i pacchetti a livello globale? Come hai giustamente detto, non dovresti mai, mai correre con sudo. Ci sono molte diverse soluzioni a questo problema e puoi passare ore a discutere i loro pro e contro religiosamente.

    Personalmente non mi piace installare i miei pacchetti utente nella cartella globale /usr/ . /usr/ è per software condiviso da tutti gli utenti sul computer. Anche se utilizza solo la macchina, ci sono ancora buoni motivi per rispettare il modo in cui è progettata la gerarchia del file system Unix. Ad esempio se decidi a un certo punto di cancellare l’intera installazione del tuo nodo.

    Il mio modo preferito di abilitare npm a installare pacchetti globalmente senza uscire da $HOME è impostare un prefisso nodo locale . È facile come correre

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

    nella tua shell locale. Dopodiché, vuoi regolare il tuo $ PATH, per puntare alla nuova destinazione di installazione per gli eseguibili del nodo globale, regolando la configurazione della tua shell preferita. Ad esempio aggiungendo

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

    al tuo ~/.bashrc . Dopodiché, puoi tranquillamente eseguire npm install -g generator-angular senza sudo, senza incorrere in conflitti di authorization e se qualcosa è completamente rotto e vuoi ripartire da zero, tutto ciò che devi fare è rimuovere la tua directory ~/.node .

    Grazie a @passy sono riuscito a farlo funzionare su Ubuntu 13.04 (nel caso qualcuno avesse problemi di configurazione simili) con quanto segue:

     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 

    cercando di eseguire:

     npm install -g yo 

    provocato

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

    Risolto utilizzando:

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

    In esecuzione:

     yo webapp 

    provocato:

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

    Risolto utilizzando:

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

    ciao nel mio caso (su Ubuntu 12.04), l’aggiunta del prefisso in ~ / .npmrc non ha cambiato nulla.

    in tal caso, compilare il pacchetto del nodo autonomamente e installarlo in / opt / node o /home/user/.node .

    Ho avuto un errore quasi identico che coinvolge un file .yo-rc.json nella mia directory principale da un progetto che ho installato in precedenza. Yeoman stava passando da cwd dalla directory di installazione a dir root fino a metà dell’installazione, ma stava emettendo solo l’errore di autorizzazioni EACCESS senza alcun dettaglio che la directory di installazione fosse / . Ci sono voluti anni per capire perché questo era, e ha comportato il debugging attraverso la fonte Yeoman, ma alla fine ho saputo che Yeoman guarderà attraverso l’albero delle directory finché non troverà un .yo-rc.json e genererà il codice lì chiamando chdir nella nuova posizione.

    Yeoman dovrebbe forse controllare che l’utente abbia i permessi di scrittura per la directory. In alternativa, potrebbe indicare nell’output che il cwd è cambiato, o stampare il nome della directory di installazione se trova .yo-rc.json è diverso da cwd.

    Il comando per la ricerca di file rogue .yo-rc.json

    sudo find / -name .yo-rc.json

    Dalla pagina iniziale di yoeman appare il comando:

     yo doctor 

    Nel mio caso, $ NODE_PATH (che nel mio caso, Ubuntu 14.04, è definito in /etc/profile.d) non è la stessa di npm root. L’aggiunta di root npm in $ NODE_PATH risolve il problema.

    Ho cercato di far npm suonasse bene con la mia scatola vagrant e questo è quello che dovevo fare per installare pacchetti npm globalmente senza sudo su ubuntu :

    1. Creare la directory per memorizzare i pacchetti globali

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

    2. Indica a npm dove inserire tutti i pacchetti installati globalmente

    Inserisci questo snippet nel tuo file ~/.npmrc :

    prefix=${HOME}/.npm-packages

    3. Assicurarsi che npm possa individuare i binaries installati e così via

    Inserisci questo snippet nel tuo .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. Eseguire il seguente comando o riavviare il terminale

    $ source ~/.bashrc

    Spero che questo aiuti chiunque si trovi in ​​una situazione simile.