npm安装机制简述

说在前面

我们在开发前端项目的时候经常会用到诸如 npm install来初始化依赖,这个过程中究竟发生了哪些事情,每次都需要从网络端重新下载依赖吗?

安装依赖时,总会有一些莫名其妙的报错,这个时候我们只要删除package-lock.json,然后删除node_modules重新下载依赖,这样就能顺利安装依赖了,到底是为什么呢?

让我们带着疑问一起往下走。

经常使用npm的小伙伴应该知道,项目中用到的依赖,大部分都不是全局安装的,两个不同的项目,即使依赖的包完全一致,初始化都需要重新执行一遍 npm install,下面我们来介绍下他的安装机制。

package-lock.json

细心地小伙伴会发现,项目中install之后会出现一个package-lock.json文件,以下是文件内容的截取。

"vue": {
    "version": "2.5.21",
    "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.21.tgz",
    "integrity": "sha512-Aejvyyfhn0zjVeLvXd70h4hrE4zZDx1wfZqia6ekkobLmUZ+vNFQer53B4fu0EjWBSiqApxPejzkO1Znt3joxQ=="
},

这段代码与package.jsonvue-baidu-map: ^0.21.20,相呼应。值得注意的是,他在lock文件中确定了当前vue的版本。这个文件需要被上传到git上吗?需要!这是锁定安装时的版本号,以保证其他人在安装依赖时大家的依赖能保持一致

如果package-lock依赖版本出现问题,我们需要升级,要怎么做呢? 需要通过npm install xxx@x.x.x这样来更新依赖,package-lock.json也能随之更新。

缓存

考虑到npm不忍心让我们每次都重新下载依赖,他对一个依赖包的同一版本会进行本地化缓存。执行命令

npm config get cache

可以查看缓存目录的位置。

在这里插入图片描述

继续下钻可以看到以下文件目录:

在这里插入图片描述

当我们执行 npm cache clean --force时,实际上是清理 _chcache文件夹。顾名思义,文件夹 content-v2中存放的是一些二进制文件,解压后就是我们的npm包资源。index-v5则是二进制文件的索引,方便查找。

每次执行install操作时,根据package-lock.json中存储的几个属性生成一个唯一的key,这个key可以找到index-v5目录下的缓存记录,如果发现,就会到content-v2中找到资源并把对应的二进制文件解压到对应项目的node_modules下面,省去了网络下载资源的开销。

总结

当执行npm install时,会先检查本地是否有lock文件:

1、如果没有会从package.json中获取包的一些信息然后检查缓存,没有缓存则下载包资源,然后添加到缓存。有缓存则直接解压,最终生成package-lock.json

2、有package-lock.json时会判断与package.json版本是否一致,如果不一致,不同的npm版本会有不同的处理方式,所以当前npm版本需要特殊注意,一般我们现在安装的都是大于v5.4.2版本的,他的特性是在安装时,如果package-lock.json安装版本兼容package.json则按照package-lock.json安装,如果不兼容,按照package.json安装并更新package-lock.json

以上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值