了解一下npm i的流程与原理

流程

执行npm install,先判断有无lock文件。

1、没有lock文件。会先根据依赖构建出扁平的依赖关系决定下哪些包。新版本的依赖关系是扁平化的,老版本是树结构,可能会出现依赖重复安装的问题,老版本示意图如下:

图来自https://zhuanlan.zhihu.com/p/128625669
作为前端工程师你真的知道 npm install 原理么? - 知乎

 

新版本示意如下:

img
作为前端工程师你真的知道 npm install 原理么? - 知乎

        构建出依赖关系会进入下包的操作。下包时会先去找缓存,缓存有符合条件的版本就直接用,没有就去registry仓库下载压缩包,然后将压缩包添加到缓存并解压到node_modules中,完成安装,最后会生成lock文件(指定一个确定的版本)。

        2、有lock文件,先检查依赖的一致性,即lock的当前版本是否符合依赖的版本要求,比如package.json的版本要求是~4.2.3,但是lock的版本是4.1.5,这样次版本就不符合要求,需要重新构建依赖关系后再下包,在下包时同样要先检查缓存。如果lock的版本符合要求就直接进行下包(也是先用缓存)的流程。

流程图如下:

版本号规则

        比如:^x.y.z  其中x代表主版本,不一定兼容上一版本;y代表次版本;z代表修订版本,做一些小的需求更改。其中^代表主版本不变,次版本和修订版本用最新的。

        ~x.y.z则是代表修订版本用最新的,主次版本不变。

最后

        在代码提交时,最好把lock文件也提交了。lock文件为我们提供一个确定的版本号,在下载包时,npm也会优先去找缓存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/499999.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【探索Linux】—— 强大的命令行工具 P.31(守护进程)

阅读导航 引言一、守护进程简介1. 概念2. 特点 二、用C创建守护进程⭕代码✅主要步骤 温馨提示 引言 当谈到计算机系统中运行的特殊进程时,守护进程(daemon)无疑是一个备受关注的话题。作为在后台默默运行并提供各种服务的进程,守…

【机器人】UIUC、北大、亚马逊提出基于动作的场景图,让机器人理解和操控未知环境

论文的主要内容是通过机器人操作的交互式探索,构建一个基于动作的场景图(Action-Conditioned Scene Graph,简称ACSG)来帮助机器人更好地理解和操作未知环境。 全文核心:在未知环境中如何让机器人自主探索并完成复杂任务…

乐维更改IP地址

1.1 系统IP调整 vim /etc/sysconfig/network-scripts/ifcfg-ens1921.2 Web相关服务IP变更 1.2.1 编辑/itops/nginx/html/lwjkapp/.env文件,更改ZABBIXSERVER、ZABBIXRPCURL、DB_HOST中的IP 1.2.2 进入/itops/nginx/html/lwjk_app/目录下,执行php bin/manager process-conso…

记录C++中,vector的迭代器在push_back以后扩容导致迭代器失效的问题

前言 vector是我们用到最多的数据结构,其底层数据结构是单端动态数组,由于数组的特点,vector也具有以下特性: ①O(1)时间的快速访问; ②顺序存储,所以插入到非尾结点位置所需时间复杂度为O(n),删…

JDK21|史诗级的更新,虚拟线程

作者:鱼仔 博客首页: https://codeease.top 公众号:Java鱼仔 前言 要想看官方对于JDK21的更新说明,可以直接跳转到下面这个官方网站中 官网地址为:https://openjdk.org/projects/jdk/21/ JDK21是最新的LTS版本,里面添加了不少新的特性&…

中小型集群部署,Docker Swarm(集群)使用及部署应用介绍

1、Docker Swarm简介 说到集群,第一个想到的就是k8s,但docker官方也提供了集群和编排解决方案,它允许你将多个 Docker 主机连接在一起,形成一个“群集”(Swarm),并可以在这个 Swarm 上运行和管…

【Web APIs】DOM节点

目录 1.节点操作 1.1DOM节点 1.2查找节点 1.2.1父节点查找 1.2.2子节点查找 1.2.3兄弟节点查找 1.3增加节点 1.4克隆节点 1.5删除节点 2.时间对象 2.1实例化 2.2时间对象方法 2.3时间戳 3.重绘和回流 1.节点操作 1.1DOM节点 DOM节点:DOM树中的每一个…

BaseDao封装增删改查

文章目录 什么是BaseDao操作代码增删改查询单个数据查询多个数据 总结 什么是BaseDao BaseDao是: 数据库里负责增加,删除,修改,查询 具体来说是一种接口代码,公共方法的接口类。 在dao层新建basedao,其他dao层接口继承basedao 相…

《VulnHub》Lampião:1

title: 《VulnHub》Lampio:1 date: 2024-03-28 21:37:49 updated: 2024-03-28 21:37:50 categories: WriteUp:Cyber-Range excerpt: 关键技术:主机发现,端口扫描、服务探测、操作系统探测,对开放的端口探测漏洞&#x…

正弦实时数据库(SinRTDB)的使用(5)-历史数据查询

前文已经将正弦实时数据库的使用进行了介绍,需要了解的可以先看下面的博客: 正弦实时数据库(SinRTDB)的安装 正弦实时数据库(SinRTDB)的使用(1)-使用数据发生器写入数据 正弦实时数据库(SinRTDB)的使用(2)-接入OPC DA的数据 正弦实时数据库(SinRTDB)…

民航电子数据库:查询cae服务存在哪些数据库以及删除数据库

目录 一、场景二、查询数据库列表三、删除数据库 一、场景 1、对接民航电子数据库 2、在CAEManage是没有直观展示已存在的数据库的,只能通过SQL查询 3、在CAEManage没有操作按钮可以删除数据库,只能通过SQL进行删除 二、查询数据库列表 1、登录SYSTE…

我是如何在学术界占有一席之地的——专注于我的写作

罗伯特纽贝克 “作为一个移民,你是怎么发表这么多文章的?”意识到我不是以英语为母语的人,当我去年面试教职时,人们无数次问过这个问题。我知道披露我的挣扎不太可能让我找到工作,所以我会笑着说:“我喜欢…

Xinstall广告效果监测,为您的App推广保驾护航

在当前的移动互联网时代,App已经成为企业与用户连接的重要桥梁。然而,App推广过程中,如何准确衡量广告效果、洞悉推广效果以及优化用户体验,一直是广告主和开发者面临的挑战。这时,一款强大而专业的App全渠道统计服务商…

蓝桥杯刷题第四天

思路: 这道题很容易即可发现就是简单的暴力即可完成题目,我们只需满足所有数的和为偶数即可保证有满足条件的分法,同时也不需要存下每个输入的数据,只需要知道他是偶数还是奇数即可,因为我们只需要偶数个奇数搭配在一块…

Manjaro 安装全新 Linux 版微信,从此告别 Wine

目前已经基本上使用 Manjaro 来工作,而工作离不开微信作为日常的工作沟通工具。因为微信官方一直没有 Linux 版本的,所以之前都只能够使用 Wine 版本,然后踩了不少坑,但还算能勉强使用。 最近听说微信终于要发布 Linux 版本的&am…

day22.二叉树part08

day22.二叉树part08 235.二叉搜索树的最近公共祖先 原题链接 代码随想录链接 思路:因为本题是二叉搜索树,利用它的特性可以从上往下进行递归遍历树,这里需要理解一点就是如果遍历到的一个节点发现该节点的值正好位于节点p和节点q的值中间…

ip地址改变导致nacos无法登录的解决方法

ip地址改变导致nacos无法登录的解决方法 在做黑马的springcloud课程里的黑马商城微服务项目时,发现使用nacos的默认账号密码(nacos,nacos)无法登录,项目里也没报错信息,虽然猜测和ip地址改变有关&#xff0…

视频素材免费无水印软件有哪些?视频素材免费下载素材库

在这个视觉为王的时代,一段精彩的视频能够跨越语言和文化的障碍,触动每一个心灵。对于每一位热血沸腾的视频创作者而言,寻找那些高质量无水印的素材,就像是在无尽的创意海洋中航行,在这段旅程中,我为你精选…

银行监管报送系统介绍(八):银行业大额交易和可疑交易报告数据报送

依据《金融机构大额交易和可疑交易报告管理办法》: 第五条 金融机构应当报告下列大额交易: (一)当日单笔或者累计交易人民币5万元以上(含5万元)、外币等值1万美元以上(含1万美元)的…

尾盘拉升超8个点,速腾聚创交出来一份怎样的超预期答卷?

“如果说2024年是智驾加速渗透,L3级智能驾驶陆续落地的一年,那么激光雷达将是这股潮流中不可缺失的那一份。” 2024年开年,速腾聚创以相当“闪亮的姿态”成为“港股2024年首只IPO上市成功”的企业。 然而,其上市之后的市场表现却…