前端工程化之包管理器

191 阅读2分钟

包管理器

(1)pnpm(基于hard link + symlink)

  • 基于硬链接机制(hard link)/内容寻址提升包的安装速度

依赖包被存储在一个全局的store目录下,不同的项目依赖同一个包(版本相同)时,会硬链接至此位置,无需重新安装, 即使一个包的不同版本,pnpm 也会极大程度地复用之前版本的代码

  • 使用软连接(符号链接,symlink, 类似于windows快捷方式)的非扁平的node_modules结构

仅将项目的直接依赖项添加到 node_modules 的根目录下, 通过符号连接查找虚拟磁盘目录.pnpm下的依赖包

node_modules/express/...     // 符号连接
node_modules/.pnpm/express@4.17.1/node_modules/xxx     // virtual store

(2)npm

  • package-lock.json锁定版本

(3)yarn

  • 并行安装
  • 缓存
  • yarn.lock锁定版本

性能对比: pnpm > yarn > npm

命令区别:

install all:   npm install / yarn / pnpm install
install:   npm install xx (-D) / yarn add xx (-D) / pnpm add xx (-D)
uninstall:   npm uninstall xx (-D) / yarn remove xx (-D) / pnpm remove xx (-D)
update: npm update xx / yarn upgrade xx / pnpm update xx

相关文件

.lock文件

以package-lock.json(npm >= 5.0)为例:

package.json只能锁定大版本号,导致安装的是最新的小版本号; .lock文件用于锁定依赖包的版本号,用于维持项目稳定性,避免随意升级包版本带来负面影响;使用npm install时会根据.lock文件指定的包版本号进行安装;若要升级包版本,使用npm install XXX@x.x.x命令,package-lock.json文件中的版本号也会随之更新

// 会修改package-lock.json文件的操作
1. 修改package.json中包的版本
2. 更改了镜像源registry
3. 添加了新的包
4. 更改包的安装位置   // pro -> dep

cnpm install无法生成该文件

.npmrc文件 一些常用的配置: proxy, https-proxy:指定npm使用代理 registry: 指定npm下载安装包的源( 默认:registry.npmjs.org/)

.package.json文件

语义化版本控制

微信图片_20220826092508.png

^1.2.0    // 1.2.0 <= version <= 2.0.0
~1.0.4    // 1.0.4 <= version <= 1.1.0, 等价于 `1.0` or `1.0.x`

工具

  • nvm: node.js版本管理工具
  • nrm: 镜像源管理工具
  • npx: 包执行器(保证命令执行),智能识别、临时下载、用完删除;费时、费资源
切换镜像源:
(1)nrm use xxxx
(2)npm install xxx -g --registry=url
(3)npm config set registry  url

参考链接

语义化版本控制