npm install之后发生了什么——npm安装机制

启动项目我们一般第一个执行的命令就是安装依赖包 npm install 。那么这个过程具体的执行流程是怎么样的呢?

安装流程

流程图

1.npm install执行后,会检查并获取npm配置,优先级为

项目级别的.npmrc文件 > 用户级别的.npmrc文件 > 全局的.npmrc文件 > npm内置的.npmrc文件

查看配置命令npm config ls -l

2.然后检查项目中是否有package-lock.json文件。

  • 如果有,检查package-lock.json和package.json中声明的依赖是否一致

    • 一致:直接使用 package-lock.json 中声明的依赖,从缓存或者网络中加载依赖
    • 不一致:各个版本的npm处理方式:


      image.png
  • 如果没有,根据package.json递归构建依赖树,然后根据依赖树下载完整的依赖资源,在下载时会检查是否有相关的资源缓存

    • 存在:将缓存资源解压到node_modules中
    • 不存在:从远程仓库下载资源包,并校验完整性,并添加到缓存,同时解压到node_modules中

最后生成package-lock.json文件。

构建依赖树时,不管是直接依赖还是子依赖,都会按照扁平化的原则,优先将其放置在node_modules根目录中(最新的npm规范),在这个过程中,如果遇到相同的模块,会检查已放置在依赖树中的模块是否符合新模块的版本范围,如果符合,则跳过,不符合,则在当前模块的node_modules下放置新模块

npm安装依赖时,会下载到缓存当中,然后解压到项目的node_modules中。
再次安装依赖的时候,会根据package-lock.json中存储的 integrity、version、name 信息生成一个唯一的 key,然后拿着key去目录中查找对应的缓存记录,如果有缓存资源,就会找到tar包的hash值,根据 hash 再去找缓存的 tar 包,并把对应的二进制文件解压到相应的项目 node_modules 下面,省去了网络下载资源的开销。

// 获取缓存位置
npm config get cache
// C:\Users\DB\AppData\Roaming\npm-cache

// 清除缓存
npm cache clean --force

另外_cacache 文件夹中不包含全局安装的包,所以想清除存在问题的包为全局安装包时,需用 npm uninstall -g 解决

参考资料:https://blog.csdn.net/h03580/article/details/116021091?spm=1001.2014.3001.5501

你可能感兴趣的:(npm install之后发生了什么——npm安装机制)