97

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

9 回答 9

153

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

你可以这样设置:

npm config set prefix /usr/local

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

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

编辑:请注意,我刚刚在我正在设置的新 Mac 上再次遇到此问题,并且还必须在 stackoverflow 上执行此处详述的过程。

于 2014-07-29T14:55:30.317 回答
85

添加$(npm get prefix)/bin到您的PATH(例如, in .bashrc),如下所示:

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

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

全局模式:npm 将包安装到前缀/lib/node_modules 的安装前缀中,bin 安装在前缀/bin 中。

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

于 2013-03-25T19:59:09.387 回答
14

我的 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

于 2019-02-09T16:30:25.770 回答
10

就我而言, 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

于 2019-03-05T06:09:32.350 回答
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 

这几乎涵盖了所有路径。例如,如果您像这样安装 gulp,npm install -g gulp它会在其中添加符号链接~/.npm-packages/bin(请注意,这是一个连字符,而不是下划线)。(不需要gulp-cli, 或gulp-cl

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

于 2017-05-04T04:40:11.067 回答
2

对于 Windows 用户

将此添加到您的路径: “%AppData%\npm”

于 2019-10-28T15:53:31.237 回答
2

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

npm list -g | head -1

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

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

添加zsh路径的快捷方式

$ echo 'export PATH="$HOME/.nodenv/versions/$(nodenv global)/bin"' >> ~/.zshrc
于 2020-03-12T14:31:54.680 回答
1
  1. 将以下行添加到您的~/.bash_profile

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

    bash -l
    
于 2019-03-27T19:21:37.120 回答
0

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

以防万一这是您的问题,请检查您的任何 .npmrc 文件是否都将其设置为 false。

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

于 2018-08-01T14:19:47.193 回答