node的包管理工具介绍

不同的语言都有相应的不同包或者环境管理工具,本文介绍一下node的

在前端开发中,使用node作为运行时环境时,常使用npm与yarn等作为包管理工具.

npm与yarn存在的问题

NPM

对于npm,其核心是有一个package.json和package-lock.json文件用于记录和追踪包版本和依赖。

之前版本的npm的node_modules目录结构是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
node_modules 
└─ 依赖A
├─ index.js
├─ package.json
└─ node_modules
└─ 依赖B
├─ index.js
└─ package.json
└─ 依赖C
├─ index.js
├─ package.json
└─ node_modules
└─ 依赖B
├─ index.js
└─ package.json

但很明显由于这种会重复安装依赖,还无法共享依赖,现在的版本是这样

1
2
3
4
5
6
7
8
9
10
11
12
13
node_modules 
└─ 依赖A
├─ index.js
├─ package.json
└─ node_modules
└─ 依赖C
├─ index.js
├─ package.json
└─ node_modules
└─ 依赖B
├─ index.js
├─ package.json
└─ node_modules

node_modules下所有的依赖都会平铺到同一层级。由于require寻找包的机制,如果A和C都依赖了B,那么A和C在自己的node_modules中未找到依赖B的时候会向上寻找,并最终在与他们同级的node_modules中找到依赖包B。 这样就不会出现重复下载的情况。而且依赖层级嵌套也不会太深。因为没有重复的下载,所有的A和C都会寻找并依赖于同一个B包。自然也就解决了实例无法共享数据的问题

这种扁平化结构虽然是解决了之前的嵌套问题,但同时也带来了另外一些问题:

  • 依赖结构的不确定性
  • 扁平化算法的复杂度增加
  • 项目中仍然可以非法访问没有声明过的依赖包(幽灵依赖)

yarn的输出格式提示以及下载速度比npm更快.

PNPM

主要是采用硬链接和软链接的方式,提高了安装速度、节约了磁盘空间、避免了“依赖分身(doppelgangers)”和“幻影依赖(Phantom dependencies)”的问题。而且 yarn 支持的:安全、离线模式、更快的速度,pnpm 都支持,而且速度还要更快。

现在一般用的还是npm或者yarn.

最后再介绍一些打包工具.

常用的打包工具有Parcel,Rollup与Webpack,现在也常常使用比较火的Vite,其功能也不仅限于打包.

对于应用使用 webpack或者Vite,对于类库使用 Rollup

参考资料

  1. pnpm/pnpm: Fast, disk space efficient package manager (github.com)
  2. Node.js (nodejs.org)
  3. Node.js 如何处理 ES6 模块 - 阮一峰的网络日志 (ruanyifeng.com)
  4. Home | Yarn - JavaScript 软件包管理器 | Yarn中文文档 - Yarn中文网 (yarnpkg.cn)
  5. Home | Yarn - JavaScript 软件包管理器 | Yarn中文文档 - Yarn中文网 (yarnpkg.cn)
-------------本文结束感谢您的阅读-------------
感谢阅读.

欢迎关注我的其它发布渠道