npm 是基于 nodejs 开发的javascript 包管理器,用于管理开发中软件包的依赖关系,从远程仓库中下载我们需要的工具。我的博客就是基于 hexo 来构建的,我们可以通过 npm install hexo-cli -g 来安装 hexo-cli 工具。那么 -g 表示什么意思?与不带 -g 有什么区别?
npm 安装
npm 安装软件有两种方式 :局部安装和全局安装。为了测试,我们使用 npm初始化一个包。
1 | mkdir -p pack |

局部安装
1 | npm install [package/module] |
局部安装会在将包/模块安装在当前目录的 node_modules 目录中。以 hexo-cli 为例
1 | npm install hexo-cli |
安装完成后,当前目录中多了一个 node_modules目录。

node_modules目录中有 hexo-cli目录

hexo-cli提供了一些命令如 hexo init, hexo generate 等。此时,测试一下 hexo 命令, 新建一个博客目录,并执行 hexo init

提示命令不存在,可是我们已经安装了 hexo-cli,这是什么情况呢?其实局部安装,只会将包或模块安装在当前目录中。检查node_modules目录,可以看到其中有个 .bin隐藏目录,提供了 hexo命令的软链接。而 shell不会在当前目录的 node_modules/hexo-cli/bin/hexo或 node_modules/.bin 中查找 hexo命令,故提示命令不存在

可以通过使用全路径或者使用 npx 来执行 hexo 命令。


全局安装
1 | npm install -g [package/module] |
与局部安装不同,全局安装会将包或模块安装在 prefix 目录中,而不是当前目录。
- 软件包安装在
{prefix}/lib/node_modules中 - 可执行文件链接到了
{prefix}/bin - 帮助页面链接到了
{prefix}/share/man
检查 prefix的值
1 | npm config ls -l |

以 hexo-cli为例:
1 | npm install -g hexo-cli |
安装完成后,检查安装情况

此时,在 blog目录中,测试 hexo 命令

总结
npm 局部安装会将包安装在当前目录中,适用于不想全局安装,仅仅只在当前目录中引用模块或局部使用包的情况。 而全局安装会将包安装在指定的目录(shell可以读取),使得包在其它目录也可以使用。