npm / yeoman installer generator-angular sans sudo

J’ai essayé d’installer generator-angularjs en utilisant Yo ( Yoeman ) sans sudo :

npm install -g generator-angular 

Je reçois:

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

Lorsque je tape sudo yo , vous me dites que je ne devrais pas utiliser sudo (ce qui est parfaitement compréhensible).

J’ai un répertoire ~/node_modules – pourquoi ne pas y installer ses paquets?

Les générateurs sont conçus pour être installés globalement. Sinon, vous devez toujours installer le générateur que vous allez utiliser dans chaque projet, ce qui est inutilement pénible. En outre, vous ne pouvez pas voir le joli menu yo qui vous liste tous les générateurs disponibles (à moins bien sûr que vous les installiez tous localement):

yo

Configuration de npm pour une installation globale

Alors, comment pouvons-nous obtenir npm pour installer des paquets globalement? Comme vous l’avez dit correctement, vous ne devriez jamais courir avec sudo. Il y a beaucoup de solutions différentes à ce problème et vous pouvez passer des heures à discuter de leurs avantages et inconvénients religieux.

Personnellement, je n’aime pas installer mes paquets d’ utilisateurs dans le dossier global /usr/ . /usr/ est pour les logiciels partagés entre tous les utilisateurs de l’ordinateur. Même si elle n’utilise que la machine, il existe toujours de bonnes raisons de respecter la conception de la hiérarchie du système de fichiers Unix. Par exemple, si vous décidez à un moment donné d’effacer toute l’installation de votre noeud.

Ma méthode préférée pour permettre à npm d’installer des paquets globalement sans sortir de $HOME consiste à définir un préfixe de noeud local . C’est aussi simple que de courir

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

dans votre shell local. Après cela, vous voulez ajuster votre $ PATH, pour pointer vers la nouvelle destination d’installation pour les exécutables du nœud global en ajustant la configuration de votre shell préféré. Par exemple en ajoutant

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

à votre ~/.bashrc . Après cela, vous pouvez exécuter heureusement npm install -g generator-angular sans sudo, sans courir dans les conflits de permission et si quelque chose est complètement cassé et que vous voulez recommencer à zéro, tout ce que vous avez à faire est de supprimer votre répertoire ~/.node .

Grâce à @passy, ​​j’ai réussi à faire fonctionner ce logiciel sur Ubuntu 13.04 (au cas où quelqu’un aurait des problèmes de configuration similaires) avec les éléments suivants:

 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 

en essayant de courir:

 npm install -g yo 

abouti à

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

Correction à l’aide de:

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

Fonctionnement:

 yo webapp 

a abouti à:

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

Correction à l’aide de:

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

Dans mon cas (sur Ubuntu 12.04), l’ajout de préfixes dans ~ / .npmrc n’a rien changé.

Si c’est le cas, créez vous-même le paquetage de noeud et installez-le dans / opt / node ou /home/user/.node .

J’ai eu une erreur presque identique impliquant un fichier .yo-rc.json dans mon répertoire racine à partir d’un projet que j’ai installé précédemment. Yeoman était en train de passer cwd du répertoire d’installation au répertoire racine jusqu’à la moitié de l’installation, mais ne produisait que l’erreur d’autorisation EACCESS sans aucun détail que le répertoire d’installation était / . Il a fallu des années pour comprendre pourquoi cela se .yo-rc.json , et cela impliquait un débogage via la source Yeoman, mais j’ai finalement appris que Yeoman consulterait l’arborescence jusqu’à trouver un .yo-rc.json et génèrerait le code en appelant chdir. au nouvel emplacement.

Yeoman devrait peut-être vérifier que l’utilisateur dispose des permissions d’écriture pour le répertoire. Alternativement, il pourrait mentionner dans la sortie soit que le cwd a changé, soit imprimer le nom du répertoire d’installation s’il trouve que .yo-rc.json est différent de cwd.

La commande pour trouver des fichiers .yo-rc.json malhonnêtes

sudo find / -name .yo-rc.json

Depuis la page de démarrage de yoeman apparaît la commande:

 yo doctor 

Dans mon cas, $ NODE_PATH (qui dans mon cas, Ubuntu 14.04, est défini dans /etc/profile.d) n’est pas le même que npm root. L’ajout de la racine npm dans $ NODE_PATH résout le problème.

J’essayais de faire en sorte que mon jeu se passe bien avec mon vagrant et c’est ce que je devais faire pour installer des paquets npm globalement sans sudo sur ubuntu :

1. Créez le répertoire pour stocker les paquets globaux

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

2. Dites à npm où placer les paquets installés globalement

Insérez cet extrait dans votre fichier ~/.npmrc :

prefix=${HOME}/.npm-packages

3. Assurez-vous que npm peut localiser les binaries installés et cetera

Insérez cet extrait dans votre .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. Exécutez le terminal suivant ou redémarrez

$ source ~/.bashrc

J’espère que cela aidera quiconque se trouve dans une situation similaire.