Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why are my Yeoman generators installing in the wrong place?

Tags:

npm

yeoman

I have a problem with Yeoman generators. They install just fine if I run "npm install [generator-name] -g". However when I try to run "yo [generator-name] yeoman can't seem to find the generator. Neither is it listed among my other generators if I just run "yo". I've tried a bunch of generators and the result is always the same.

After a bit of bit of investigation I found that the downloaded generator is placed in

/usr/local/lib/node_modules/ 

But my other generators are placed in

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

Here is an image of how it looks on my machine http://i.imgur.com/DxWTYHb.png, I'm running OSX in case that matters. Looks like something is wrong to me - but I cannot figure it out.

Not sure if this helps, but brew doctor and $NODE_PATH return nothing while $PATH returns:

-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 


UPDATE


I tried what Eddie Monge Jr suggested and now my angular generator works fine. However when I installed another generator (chrome-extension) yeoman insists that it's not installed/found.

When I run ls $(npm config get prefix)/lib/node_modules I get this:

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

And npm list -g returns this (I cut out a lot of generic stuff)

/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] 

The strange part for me is if I run yo --help I get a strange list of generators

[?] 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! 
like image 728
anderssonma Avatar asked Aug 06 '13 13:08

anderssonma


2 Answers

I tried installing Yeoman on an Ubuntu precise32 vagrant vm. I ran into the same problem: Yeoman did not find the generators I installed, although there were no errors during the installation of these generators. Files were in place and permissions seemed alright.

The above solutions didn't work for me.

I ran

yo doctor 

to see what was wrong, and as it turned out, the following was the problem:

[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 

The fix suggested by the Yeoman Doctor worked as advertised.

like image 109
wkampmann Avatar answered Sep 22 '22 07:09

wkampmann


I hit this issue and I'm hoping it will help someone. I believe upgrading NPM caused this initial issue for me.

/usr/local/lib/node_modules 

Was the location of a lot of my modules in the past. Since upgrading node at some point, the directory became

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

When I would run new installations such as:

npm install -g grunt-cli 

I since I run grunt from the command line it wouldn't 'find' it (that's because it wasn't in my new node_modules dir). I set up this up in my .bash_profile:

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

Now I am pointing to the new node_modules directory So all the new npm modules I install find the right location: /usr/local/share/npm/lib/node_modules

But not yo

I ran a which yo and my path was

/usr/local/bin/yo 

This binary was pointing to the OLD node_modules installation @

/usr/local/lib/node_modules 

My solution was to do this

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

The old reference to yo is gone for keeps, now I can do

npm install -g yo 

This will add it to the new node_modules location

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

and now the new 'yo' references the proper node_modules installation base

source ~/.bash_profile 

then we can see yo is referenced from the proper spot

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

all future generators will be placed in the proper node_modules directory and yo will be able to find them without a problem!

like image 26
somedirection Avatar answered Sep 24 '22 07:09

somedirection