- Npm安装机制
- 本章内容为博主在原教程基础上添加学习笔记,教程版权归原作者所有。来源:JavaScript教程
目录
# 安装机制
# 检查config
这一步会检查并获取npm的配置文件(.npmrc),检查顺序:
项目级的 .npmrc 文件 > 用户级的 .npmrc 文件> 全局级的 .npmrc 文件 > npm 内置的 .npmrc 文件。
# 判断是否有lock文件
如果存在,判断是否和package.json中声明的版本一致
- 一致的话,直接使用package.lock.json中的信息,从缓存或网络拉取资源
- 不一致的话,不同npm版本不同操作;最新的npm版本中如果package.json 和 package.lock.json 声明版本不兼容,则安装package.json安装,并更新package.lock.json
如果不存在lock文件,则根据package.json递归构建依赖树(扁平化原则),然后按照构建好的依赖树下载完整的依赖资源
# 检查缓存
在下载包的时候,会先检查是否有资源缓存
- 有的话,将缓存内容解压到node_modules中
- 没有的话,则从npm远程仓库下载包,并检验包完整性,然后添加到缓存中,同时解压到node_modules
当 npm install 执行时,通过pacote把相应的包解压在对应的 node_modules 下面。npm 在下载依赖时,先下载到缓存当中,再解压到项目 node_modules 下。pacote 依赖npm-registry-fetch来下载包,npm-registry-fetch 可以通过设置 cache 属性,在给定的路径下根据IETF RFC 7234生成缓存数据。 接着,在每次安装资源时,根据 package-lock.json 中存储的 integrity、version、name 信息生成一个唯一的 key,这个 key 能够对应到 index-v5 目录下的缓存记录。如果发现有缓存资源,就会找到 tar 包的 hash,根据 hash 再去找缓存的 tar 包,并再次通过pacote把对应的二进制文件解压到相应的项目 node_modules 下面,省去了网络下载资源的开销。
# 最后生成 package-lock.json
上次更新: 2023/05/23, 08:24:19