未正确安装全局节点模块。未找到命令

我有一个问题,安装全局节点模块和我找到的一切在线说,解决方案只是添加-g,这不是问题。我认为这是一个链接问题或错误的目录问题。

我是这么做的:

$ npm install -g express
npm http GET https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/mkdirp/0.3.3
...downloads correctly


$ express myapp
bash: express: command not found

但是,当我运行直接链接位置来表达它的工作:

   $ /usr/local/share/npm/bin/express myapp


create : myapp
create : myapp/package.json
create : myapp/app.js
... Builds app correctly

模块所在地:

$ which node
/usr/local/bin/node
$ node -pe process.execPath
/usr/local/Cellar/node/0.8.20/bin/node
$ npm link express
/Users/bentonrr/Development/Personal/node_modules/express -> /usr/local/share/npm/lib/node_modules/express

在我的. bash _ profile 中,我有:

export PATH=/usr/local/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules:/usr/local/lib/node

Do I need to change my Node environment to download to correct folder? Is something not linking correctly? I am lost..

谢谢!

其他参数:

$ node --version
v0.8.20
$ npm --version
1.2.11
$ brew --version
0.9.4
OSX Version 10.8.2
111292 次浏览

Add $(npm get prefix)/bin to your PATH (e.g., in .bashrc), like so:

echo "export PATH=$PATH:$(npm get prefix)/bin" >> ~/.bashrc

For more info, see npm help npm:

global mode: npm installs packages into the install prefix at prefix/lib/node_modules and bins are installed in prefix/bin.

You can find the install prefix with npm get prefix or npm config list | grep prefix.

This may mean your node install prefix isn't what you expect.

You can set it like so:

npm config set prefix /usr/local

then try running npm install -g again, and it should work out. Worked for me on a mac, and the solution comes from this site:

http://webbb.be/blog/command-not-found-node-npm/

EDIT: Note that I just came across this again on a new Mac I'm setting up, and had to do the process detailed here on stackoverflow as well.

I do not ever install any npm stuff, via sudo! I have my own reasons, but I just try to keep things simple, and user based, since this is a user development world, and not everyone has root access, and root/sudo installing things like this just seems to clutter up things to begin with. After all, all developers should be able to follow these instructions, not just privileged sudo users.

This particular system is a RHEL7 accessed via SSH:

Frequently one needs various versions of node, so I use NVM https://github.com/creationix/nvm

So with that said, I can show you a working example for -g global installs, using NVM, NPM, and node paths not using root.

set your prefix for .npm-packages if it isn't already. (note, thats a hyphen, not an underscore)

nvm config ls
prefix = "/home/<yourusername>/.npm-packages"

Then adjust your ~/.bash_profile or .bashrc if you prefer readup on why and which here, with the following information.

#PATH EXPORTS
NODE_MODULES=$HOME/.npm
NPM_PACKAGES=$HOME/.npm-packages/bin
export PATH=$PATH:$HOME/bin:$NODE_MODULES:$NPM_PACKAGES


#NVM ENABLE
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm

That pretty much covers all paths. For e.g., if you install gulp like this npm install -g gulp it symlinks in ~/.npm-packages/bin (note thats a hyphen, not an underscore). (no need for gulp-cli, or gulp-cl)

You can pretty much replace/comment-out all other node path exports. You can put this path info below any other path info you already have, safely, without it overwriting that stuff.

The problem I had was missing the binaries because the user specific .npmrc file in my home directory had bin-links set to false, though the default is true.

Just in case this is your problem check that none of your .npmrc files have it set to false.

Then re-installing all modules will create the binaries at the prefix so your PATH can see them.

My npm couldn't find global packages as well. I did what Brad Parks suggested:

npm config set prefix /usr/local

Then I got a EACCES permissions error (DON'T USE sudo npm install -g <package>) and fixed it through the official npm docs: https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally

  1. On the command line, in your home directory, create a directory for global installations:
 mkdir ~/.npm-global
  1. Configure npm to use the new directory path:
 npm config set prefix '~/.npm-global'
  1. In your preferred text editor, open or create a ~/.profile file and add this line:
 export PATH=~/.npm-global/bin:$PATH
  1. On the command line, update your system variables:
 source ~/.profile
  1. Then install a package globally and test it! For example:
npm install -g awsmobile-cli
awsmobile configure


In my case, The NODE_PATH environment variable was empty. Check whether it is empty-

echo $NODE_PATH

if the NODE_PATH is empty. Then change ~/.bash_profile and add NODE_PATH

nano ~/.bash_profile
export NODE_PATH=`npm root -g`
source ~/.bash_profile

Now install npm modules again and check whether that is being installed on the path npm root -g

  1. Add the following line to your ~/.bash_profile

    export PATH="$HOME/.npm/bin:$PATH"
    
  2. Load bash profile

    bash -l
    

For Windows users

Add this to your path: "%AppData%\npm"

Check your global Node module's binary folder, and add it to your $PATH.

npm list -g | head -1

If you use nodenv, the path will change whenever you install the global node version. Adding the path like this solves my problem.

"$HOME/.nodenv/versions/$(nodenv global)/bin"

Shortcut for adding the path to zsh

$ echo 'export PATH="$HOME/.nodenv/versions/$(nodenv global)/bin"' >> ~/.zshrc

It may seem like a hack, but setting up yarn when possible saves you a lot of node environment headaches for various unix distros.