web-dev-qa-db-fra.com

Pourquoi mes générateurs Yeoman sont-ils installés au mauvais endroit?

J'ai un problème avec les générateurs Yeoman. Ils s'installent très bien si je lance "npm install [générateur-nom] -g". Cependant, lorsque j'essaie d'exécuter "yo [nom du générateur], yeoman ne semble pas trouver le générateur. Il n'est pas non plus répertorié parmi mes autres générateurs si je lance simplement" yo ". J'ai essayé un tas de générateurs et le résultat est toujours le même.

Après un peu d'enquête, j'ai trouvé que le générateur téléchargé était placé dans

/usr/local/lib/node_modules/

Mais mes autres générateurs sont placés dans

/usr/local/lib/share/npm/lib/node_modules/

Voici une image de son apparence sur ma machine http://i.imgur.com/DxWTYHb.png , j'utilise OSX au cas où cela importerait. On dirait que quelque chose ne va pas pour moi - mais je ne peux pas le comprendre.

Je ne sais pas si cela aide, mais brew doctor et $ NODE_PATH ne renvoient rien tandis que $ PATH renvoie:

-bash: 
/usr/local/share/npm/bin:
/Users/marcus/.rvm/gems/Ruby-2.0.0-p247/bin:
/Users/marcus/.rvm/gems/Ruby-2.0.0-p247@global/bin:
/Users/marcus/.rvm/rubies/Ruby-2.0.0-p247/bin:
/Users/marcus/.rvm/bin:
/usr/bin:
/bin:
/usr/sbin:
/sbin:
/usr/local/bin:
/usr/local/git/bin: No such file or directory


[~ # ~] mise à jour [~ # ~]


J'ai essayé ce qu'Eddie Monge Jr a suggéré et maintenant mon générateur angular fonctionne bien. Cependant, quand j'ai installé un autre générateur (extension chromée), yeoman insiste sur le fait qu'il n'est pas installé/trouvé.

Lorsque je lance ls $ (npm config get prefix)/lib/node_modules j'obtiens ceci:

bower                      generator-mocha
generator-angular          grunt-cli
generator-chrome-extension npm
generator-karma            yo

Et npm list -g renvoie ceci (j'ai coupé beaucoup de choses génériques)

/usr/local/lib
├─┬ [email protected]
├─┬ [email protected]
│ └─┬ [email protected]
├─┬ [email protected]
│ └─┬ [email protected]
├─┬ [email protected]
│ └─┬ [email protected]
├─┬ [email protected]
│ └─┬ [email protected]
├─┬ [email protected]
├─┬ [email protected]
└─┬ [email protected]

La partie étrange pour moi est que si je lance yo --help j'obtiens une liste étrange de générateurs

[?] What would you like to do?
  [ ] Run the Angular generator
  [ ] Run the Foundation generator
  [ ] Run the H5bp generator
  [X] Run the Mocha generator
  [ ] Run the Webapp generator
  [ ] Run the Karma generator
  [ ] Update your generators
  [ ] Install a generator
  [ ] Find some help
  [ ] Get me out of here!
36
anderssonma

J'ai essayé d'installer Yeoman sur un vm Ubuntu precise32 vagrant. J'ai rencontré le même problème: Yeoman n'a pas trouvé les générateurs que j'ai installés, bien qu'il n'y ait eu aucune erreur lors de l'installation de ces générateurs. Les fichiers étaient en place et les autorisations semblaient correctes.

Les solutions ci-dessus n'ont pas fonctionné pour moi.

J'ai couru

yo doctor

pour voir ce qui n'allait pas, et il s'est avéré que le problème était le suivant:

[Yeoman Doctor] Uh oh, I found potential errors on your machine
---------------

[Error] NPM root value is not in your NODE_PATH
  [info]
    NODE_PATH = /usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
    NPM root  = /home/vagrant/npm/lib/node_modules

  [Fix] Append the NPM root value to your NODE_PATH variable
    Add this line to your .bashrc
      export NODE_PATH=$NODE_PATH:/home/vagrant/npm/lib/node_modules
    Or run this command
      echo "export NODE_PATH=$NODE_PATH:/home/vagrant/npm/lib/node_modules" >> ~/.bashrc && source ~/.bashrc

Le correctif suggéré par le médecin Yeoman a fonctionné comme annoncé.

50
wkampmann

J'ai touché ce problème et j'espère que cela aidera quelqu'un. Je crois que la mise à niveau de NPM a causé ce problème initial pour moi.

/usr/local/lib/node_modules

Était l'emplacement de beaucoup de mes modules dans le passé. Depuis la mise à niveau du nœud à un moment donné, le répertoire est devenu

/usr/local/share/npm/lib/node_modules

Quand j'exécuterais de nouvelles installations telles que:

npm install -g grunt-cli

Depuis que j'exécute grunt depuis la ligne de commande, je ne le trouverais pas (c'est parce qu'il n'était pas dans mon nouveau répertoire node_modules). J'ai mis cela en place dans mon .bash_profile:

export PATH=$PATH:/usr/local/share/npm/bin

Maintenant, je pointe vers le nouveanode_modules répertoire Donc, tous les nouveaux modules npm que j'installe trouvent le bon emplacement:/usr/local/share/npm/lib/node_modules

Mais pas yo

J'ai couru un which yo et mon chemin était

/usr/local/bin/yo

Ce binaire pointait vers L'ANCIEN node_modules installation @

/usr/local/lib/node_modules

Ma solution était de le faire

rm /usr/local/bin/yo
npm remove -g yo

L'ancienne référence à yo a disparu, maintenant je peux le faire

npm install -g yo

Cela l'ajoutera au nouveau node_modules emplacement

/usr/local/share/npm/lib/node_modules

et maintenant le nouveau "yo" fait référence à la base d'installation appropriée de node_modules

source ~/.bash_profile

alors nous pouvons voir yo est référencé au bon endroit

which yo
/usr/local/share/npm/bin/yo

tous les futurs générateurs seront placés dans le bon node_modules répertoire et yo pourront les trouver sans problème!

24
somedirection

J'ai entièrement désinstallé yeoman, puis l'ai réinstallé

npm remove -g yo
npm install -g yo

Cela a résolu mon problème avec les générateurs angular angulaires.

7
Sam Barnum

Il semble que votre npm soit hors de contrôle. Vérifiez où les choses sont installées: npm config get prefix Est-ce là que vous vous attendiez à ce que les packages soient installés? Est-ce là où ils sont actuellement installés?

Pour énumérer ce qui s'y trouve:

ls $(npm config get prefix)/lib/node_modules

Cela listera les packages npm installés globalement.

npm list -g

Répertorie les éléments actuellement installés. Assurez-vous que yo et les générateurs sont répertoriés au niveau supérieur.

Pour supprimer le truc yo et recommencer:

npm remove -g yo generator-* yeoman-generator
npm install -g yo generator-angular

Cela devrait arranger les choses.

1
Eddie Monge Jr