KJohn2q

一个热爱技术,热爱分享的程序员

0%

npm全局和局部安装的区别

npm 是基于 nodejs 开发的javascript 包管理器,用于管理开发中软件包的依赖关系,从远程仓库中下载我们需要的工具。我的博客就是基于 hexo 来构建的,我们可以通过 npm install hexo-cli -g 来安装 hexo-cli 工具。那么 -g 表示什么意思?与不带 -g 有什么区别?

npm 安装

npm 安装软件有两种方式 :局部安装和全局安装。为了测试,我们使用 npm初始化一个包。

1
2
mkdir -p pack
npm init

image-20211105155130555

局部安装

1
npm install [package/module]

局部安装会在将包/模块安装在当前目录的 node_modules 目录中。以 hexo-cli 为例

1
npm install hexo-cli

安装完成后,当前目录中多了一个 node_modules目录。

image-20211105155258331

node_modules目录中有 hexo-cli目录

image-20211105155741122

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

image-20211105160828637

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

image-20211105161534828

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

image-20211105164034467

image-20211105164107829

全局安装

1
npm install -g [package/module]

与局部安装不同,全局安装会将包或模块安装在 prefix 目录中,而不是当前目录。

  • 软件包安装在 {prefix}/lib/node_modules
  • 可执行文件链接到了 {prefix}/bin
  • 帮助页面链接到了 {prefix}/share/man

检查 prefix的值

1
npm config ls -l

image-20211105165203966

hexo-cli为例:

1
npm install -g hexo-cli

安装完成后,检查安装情况

image-20211105165421065

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

image-20211105165735196

总结

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

引用