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


80

我在安装全局节点模块时遇到问题,我在网上找到的所有内容都说解决方法只是添加-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环境才能下载到正确的文件夹吗?链接不正确吗?我迷路了..

谢谢!

其他规格:

$ 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
JP理查森,

2
我添加了:将PATH = / usr / local / share / npm / bin:$ PATH导出到我的.bash_profile,它可以正常工作。谢谢!添加一个答案,以便我接受并投票。
im_benton 2013年

就我而言,也通过在OSX上通过Cellar安装了NPM,我bin在.bash_profile中设置的路径是:export PATH=$PATH:/usr/local/Cellar/node/10.5.0/bin
Shane

Answers:


61

添加/usr/local/share/npm/bin到您的PATH(例如中的.bashrc)。

有关更多信息,请参见npm help npm

全局模式:npm将软件包安装到位于prefix / lib / node_modules的安装前缀中,并将bins安装在prefix / bin中。

您可以使用npm get prefix或找到安装前缀npm config list | grep prefix


使用nvm的非sudo怎么办,路径不$HOME/.npm应该是.bash_profile或.bashrc?我使用nvm,因此要确保即时通讯不会对此产生交叉影响。
blamb

对于在OSX上通过Homebrew安装Node和npm的任何人,您需要添加到的bin文件夹的位置PATH将为/usr/local/Cellar/node/VERSION_NUMBER/bin/
乔恩·贝茨

135

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

您可以这样设置:

npm config set prefix /usr/local

然后尝试npm install -g再次运行,它应该可以解决。在Mac上为我工作,解决方案来自此站点:

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

编辑:请注意,我只是在我正在设置的新Mac上再次遇到了这一问题,并且还必须执行此处关于stackoverflow的详细过程。


我正在使用nodenv,很可能有一种更好的方法可以解决我的情况。但是,您的解决方案是一种快速而肮脏的解决方案!然后,我将前缀切换回了nodenv前缀,并且能够从中运行程序包/usr/local path。谢谢!
加勒特·塔科隆特

3
我花了几个月的时间解决这个问题,这是我看到的唯一为我解决的答案!非常感谢。
azz0r

它仍然对我不起作用。我能做什么?我想在win7上安装全局打字稿。
Artimal

1
我尝试了很多解决方案,但只有这个对我有用。由于某种原因,/Users/(username)/.npm-global即使我重新安装了所有内容,我的前缀也被设置为。我也在Mac电脑上
Castilho,

如果您是通过Cellar安装Node的,这会打扰您的。
Shane

11

我的npm也找不到全局包。我做了Brad Parks的建议:

npm config set prefix /usr/local

然后我得到了EACCES权限错误(请勿使用sudo npm install -g <package>),并通过官方的npm文档进行了修复:https ://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally

  1. 在命令行的主目录中,创建用于全局安装的目录:
 mkdir ~/.npm-global
  1. 配置npm以使用新的目录路径:
 npm config set prefix '~/.npm-global'
  1. 在您喜欢的文本编辑器中,打开或创建〜/ .profile文件并添加以下行:
 export PATH=~/.npm-global/bin:$PATH
  1. 在命令行上,更新系统变量:
 source ~/.profile
  1. 然后在全局安装软件包并进行测试!例如:
npm install -g awsmobile-cli
awsmobile configure


大家好,我有问题。步骤2之后,在〜/ .npm-global中找不到bin /。所以,它不起作用,对吗?
AquariusPotter

它仍然应该工作。不要忘记该export PATH=~/.npm-global/bin:$PATH行在〜/ .profile文件中。你有什么错误吗?
维森特

6

就我而言,NODE_PATH环境变量为空。检查是否为空-

echo $NODE_PATH

如果NODE_PATH为空。然后更改〜/ .bash_profile并添加NODE_PATH

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

现在再次安装npm模块,并检查路径上是否已安装该模块 npm root -g


这个!是使用NVM时的问题,代表需要在Linux / fedora上寻找全局软件包
Ray Foss

4

从来没有通过sudo安装任何npm的东西!我有自己的理由,但我只是尝试使事情简单化,并基于用户,因为这是一个用户开发的世界,并不是每个人都具有root访问权限,因此root / sudo安装这样的事情似乎会使事情开始混乱用。毕竟,所有开发人员都应该能够遵循这些说明,而不仅仅是特权sudo用户。

这个特定的系统是通过SSH访问的RHEL7:

通常一个节点需要各种版本的节点,因此我使用NVM https://github.com/creationix/nvm

因此,我可以向您展示一个-g使用NVM,NPM和不使用root的节点路径进行全局安装的有效示例。

设置前缀(.npm-packages如果尚未设置)。(请注意,多数民众赞成在连字符,而不是下划线)

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

然后,如果您更喜欢在这里阅读为什么和该内容,请调整〜/ .bash_profile或.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 

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

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


1
  1. 将以下行添加到您的 ~/.bash_profile

    export PATH="$HOME/.npm/bin:$PATH"
    
  2. 加载bash配置文件

    bash -l
    


0

我的问题是缺少二进制文件,因为我的主目录中的用户特定.npmrc文件已bin-links设置为false,尽管default is true

万一这是您的问题,请检查您的.npmrc文件均未将其设置为false。

然后重新安装所有模块将在处创建二进制文件,prefix以便您PATH可以看到它们。


0

检查全局节点模块的二进制文件夹,并将其添加到$ PATH中。

npm list -g | head -1

如果使用nodenv,则每当安装全局节点版本时,路径都会更改。像这样添加路径可以解决我的问题。

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

将路径添加到zsh的快捷方式

$ echo 'export PATH="$HOME/.nodenv/versions/$(nodenv global)/bin"' >> ~/.zshrc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.