2013-02-24 131 views
36

我在安装全局节点模块时出现问题,并且我在网上找到的所有内容都表示解决方法只是添加-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 

我是否需要更改节点环境以下载到正确的文件夹?是不正确的链接?我迷路了..

谢谢!

其他规格:

$ node --version 
v0.8.20 
$ npm --version 
1.2.11 
$ brew --version 
0.9.4 
OSX Version 10.8.2 
+1

这是因为/ usr/local/share/npm/bin /不在您的shell的$ PATH中。这就是为什么shell无法找到'express'。 – 2013-02-24 19:59:54

+1

我添加了:export PATH =/usr/local/share/npm/bin:$ PATH到我的.bash_profile,它工作。谢谢!添加一个答案,以便我可以接受并upvote。 – 2013-02-24 21:42:03

回答

37

添加/usr/local/share/npm/binPATH(例如,.bashrc)。

欲了解更多信息,请参见npm help npm

全球模式: NPM安装包到安装在前缀前缀/ lib目录/ node_modules和箱安装在前缀/箱。

您可以找到带有npm get prefixnpm config list | grep prefix的安装前缀。

+0

对于使用nvm的非sudo,怎么样?不应该将路径设置为.bash_profile或.bashrc的'$ HOME/.npm'?我使用nvm,所以想确保我不在这件事上交叉捆绑。 – blamb 2017-05-03 05:16:32

-5

步骤

首先,删除节点:

sudo rm -rf /usr/local/lib/node_modules/jitsu 
npm cache clear 
sudo npm install jitsu -g 

二,创建.bash_rc:

vi ~/.bash_rc 

复制以下项目并粘贴到文件,在步骤2中打开:

[[ -s ~/.bashrc ]] && source ~/.bashrc 
export PATH=/usr/local/share/npm/bin:$PATH 

润柔。运行VI〜/ .bash_profile中,这是你应该看到:

[[ -s ~/.bashrc ]] && source ~/.bashrc 
export PATH=/usr/local/share/npm/bin:$PATH 

# {{{ 
# Node Completion - Auto-generated, do not touch. 
shopt -s progcomp 
for f in $(command ls ~/.node-completion); do 
    f="$HOME/.node-completion/$f" 
    test -f "$f" && . "$f" 
done 
# }}} 

我找到了答案,从这篇文章中删除节点: JITSU FAILED TO INSTALL OSX [node 0.8.17 and NPM 1.2.0] WTF

50

这可能意味着你的节点安装的前缀是不是你期望。

您可以设置它像这样:

npm config set prefix /usr/local

然后尝试再次运行npm install -g,它应该工作了。为我工作在Mac和解决方案来自这个网站:

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

编辑:请注意,我只是碰到这种再次来到一个新的Mac我设置了,不得不做的过程还有detailed here on stackoverflow

+3

你是男人......谢谢你! – Nico 2016-02-18 16:42:27

+2

这是正确的答案 – naomik 2016-03-30 09:08:41

+0

我正在使用'nodenv',并且很可能有更好的方法来解决这个问题。但是,您的解决方案作为一个快速和肮脏的修复工作!然后,我将前缀切换回'nodenv'前缀,并且能够从'/ usr/local path'运行包。谢谢! – 2017-01-19 06:31:30

3

我不会通过sudo安装任何npm的东西!我有我自己的理由,但我只是试图保持简单和基于用户,因为这是一个用户开发世界,并不是每个人都有root权限,而root/sudo安装这样的东西似乎只是让事情开始混乱用。毕竟,所有开发者都应该能够遵循这些指示,而不仅仅是特权sudo用户。

这种特殊的系统是一个RHEL7通过SSH访问:

经常一个人需要节点的各种版本,所以我用NVM https://github.com/creationix/nvm

所以随着中说,我可以告诉你-g全球工作示例使用NVM,NPM和不使用root的节点路径进行安装。

如果它尚未设置您的前缀.npm-packages。 (注意,那是一个连字符,而不是下划线)

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

然后调整你的〜/ .bash_profile中,或者如果你喜欢readup on why and which here,以下信息.bashrc中。

#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 

这几乎涵盖了所有路径。例如,如果你像这样安装gulp npm install -g gulp它符号连接~/.npm-packages/bin(注意是连字符而不是下划线)。 (不需要gulp-cligulp-cl

您几乎可以替换/注释掉所有其他节点路径导出。您可以安全地将此路径信息放置在您已拥有的任何其他路径信息的下面,而不会覆盖那些内容。