npm install 执行原理

npm install 执行时:

1.首先得有package.json 包管理文件 才可以执行npm install

2.npm install -> 看是否有package-lock.json文件,

3.没有package-lock.json文件,则构建依赖关系,然后从registry仓库(https://registry.npmjs.org/) 下载安装包(压缩文件),
将压缩包添加到本地的缓存文件中(查看本地缓存路径:npm config get cache),再将下载的压缩包解压到node_modules中,同时生成package-lock.json文件,完成安装

4.有package-lock.json文件,则先检查下载的包和package-lock.json文件中的包版本是否符合semver版本规范,不一定非要完全和版本一致,只要符合npm semver(https://docs.npmjs.com/misc/semver) 版本规范即可(像 2.4.4 和 2.4.10 也是符合的版本规范)

5.不一致,则重新构建依赖关系,然后就是和第三部一样,去仓库下载,加压,添加缓存,解压到node_modules中,生成新的
package-lock.json

6.一致,则会去本地缓存文件中去查找缓存文件(通过查找算法),找到缓存文件,将压缩包解压到node_modules中,完成安装

摘自coderwhy老师的图片

补充知识:
1.早期的npm存在很多的缺陷,比如安装依赖速度很慢、版本依赖混乱等等一系列的问题;而yarn 是为了弥补 npm 的一些缺陷而出现的;
2.从npm5开始npm才支持缓存压力 -> 收到了yarn的压力(yarn是由Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理
工具)
3.安装依赖速度很慢就是没有缓存 之前从registry仓库下载的包 缓存到本地,以便下次下载时可以直接从本地下载而无需再从 registry仓
库下载
4.版本依赖混乱则是npm早期包依赖是树结构,这样会导致一个包被多个分支依赖,从而造成包下载多次,下载npm是扁平化结构,每一
个包都是同级的
5.node的包版本是符号semver版本规范的:

    	X主版本号(major):当你做了不兼容的 API 修改(可能不兼容之前的版本);

        Y次版本号(minor):当你做了向下兼容的功能性新增(新功能增加,但是兼容之前的版本);

        Z修订号(patch):当你做了向下兼容的问题修正(没有新功能,修复了之前版本的bug)

6.^和~的区别:

        1.^x.y.z:表示x是保持不变的,y和z永远安装最新的版本;

        2.~x.y.z:表示x和y保持不变的,z永远安装最新的版本;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值