在前端开发中,应用node作为运行时环境时,常应用npm与yarn等作为包管理工具.
npm与yarn存在的问题
NPM
对于npm,其外围是有一个package.json和package-lock.json文件用于记录和追踪包版本和依赖。
之前版本的npm的node_modules目录构造是
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
但很显著因为这种会反复装置依赖,还无奈共享依赖,当初的版本是这样
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
参考资料
- pnpm/pnpm: Fast, disk space efficient package manager (github.com)
- Node.js (nodejs.org)
- Node.js 如何解决 ES6 模块 – 阮一峰的网络日志 (ruanyifeng.com)
- Home | Yarn – JavaScript 软件包管理器 | Yarn中文文档 – Yarn中文网 (yarnpkg.cn)
- Home | Yarn – JavaScript 软件包管理器 | Yarn中文文档 – Yarn中文网 (yarnpkg.cn)
本文由mdnice多平台公布