web-dev-qa-db-fra.com

npm/yeoman installer générateur angulaire 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 vous n'y installez pas ses paquets?

71
Karan

Les générateurs sont conçus pour être installés dans le monde entier. Sinon, vous devez toujours installer le générateur que vous êtes sur le point d'utiliser dans chaque projet, ce qui est inutilement pénible. De plus, vous ne verrez pas le charmant menu yo qui répertorie 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 que NPM installe les paquets globalement? Comme vous l'avez dit à juste titre, vous ne devriez jamais, jamais exécuter yo avec Sudo. Il existe beaucoup de solutions différentes à ce problème et vous pouvez passer des heures à discuter religieusement de leurs avantages et de leurs inconvénients.

Personnellement, je n'aime pas installer mes packages utilisateur dans le dossier global/usr/. /usr/ concerne les logiciels partagés par tous les utilisateurs de l'ordinateur. Même s’il 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 l’ensemble de votre installation de nœud.

Mon moyen préféré d'activer npm pour installer les packages globalement sans rompre avec $HOME est pour 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 souhaitez ajuster votre $ PATH pour qu'il pointe vers la nouvelle destination d'installation des exécutables de nœud globaux en ajustant la configuration de votre shell favori. Par exemple. en ajoutant

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

à votre ~/.bashrc. Après cela, vous pourrez exécuter npm install -g generator-angular sans problème, sans vous heurter à des conflits d’autorisation et si quelque chose est complètement cassé et que vous voulez recommencer à zéro, il vous suffit de supprimer votre répertoire ~/.node.

168
passy

Grâce à @passy, ​​j’ai enfin réussi à faire fonctionner cela 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

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

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
26
pagetribe

J'ai essayé d'obtenir que yeoman joue Nice avec ma boîte vagrant et voici ce que je devais faire pour installer les paquets npm globalement sans Sudo sur ubuntu:

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

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

2. Dites npm où mettre tous les paquets installés globalement

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

prefix=${HOME}/.npm-packages

3. Assurez-vous que npm peut localiser installé binaries 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 suivant ou redémarrez le terminal

$ source ~/.bashrc

J'espère que cela aide tous ceux qui se trouvent dans une situation similaire.

0
datatype_void

salut dans mon cas (sur Ubuntu 12.04), l’addition de préfixe dans ~/.npmrc n’a rien changé.

si tel est le cas, construisez vous-même le package de nœuds et installez-le dans/opt/node ou /home/user/.node .

0
stephanfriedrich

Dans 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 la même chose que npm root. Ajouter dans npm root dans $ NODE_PATH résoud le problème.

0
molavec

J'ai eu une erreur presque identique impliquant un fichier .yo-rc.json non autorisé dans mon répertoire racine à partir d'un projet que j'avais précédemment installé. Yeoman était en train de basculer cwd du répertoire d'installation vers le répertoire racine au milieu de l'installation, mais ne produisait que l'erreur d'autorisations EACCESS sans indiquer que le répertoire d'installation était /. Cela a pris du temps pour comprendre pourquoi, et impliquait le débogage via la source Yeoman, mais j’ai finalement appris que Yeoman examinera l’arborescence jusqu’à trouver un .yo-rc.json et y générera le code en appelant chdir vers le nouvel emplacement.

Yeoman devrait peut-être vérifier que l'utilisateur dispose des droits en écriture pour le répertoire. Vous pouvez également indiquer dans la sortie que cwd a été modifié ou imprimer le nom du répertoire d'installation s'il trouve .yo-rc.json différent de cwd.

La commande pour rechercher des fichiers .yo-rc.json indésirables 

Sudo find / -name .yo-rc.json

0
Sean