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?
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):
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
.
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
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
:
$ mkdir "${HOME}/.npm-packages"
npm
où mettre tous les paquets installés globalement~/.npmrc
:prefix=${HOME}/.npm-packages
npm
peut localiser installé binaries
et cetera.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)"
$ source ~/.bashrc
J'espère que cela aide tous ceux qui se trouvent dans une situation similaire.
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 .
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.
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