即时看!Node工程的依赖包管理方式

2023-04-23 22:10:17 来源:博客园

作者:京东零售 陈震

在前端工程化中,JavaScript 依赖包管理是非常重要的一环。依赖包通常是项目所依赖的第三方库、工具和框架等资源,它们能够帮助我们减少重复开发、提高效率并且确保项目可以正确的运行。


(资料图)

目前比较常见的前端包管理器有 npm 和 Yarn,npm 是 Node.js 自带的包管理器,它可以安装、共享和分发 node.js 模块。最近pnpm也挺火的,通过并行下载和安装依赖项,在执行安装、更新、删除等操作时也更快。

但无论使用哪个包管理器,都要通过 package.json 文件的版本控制功能,保证在不同开发环境中的一致性。那么,package.json是如何进行依赖包管理的呢?我们来一起深入了解一下package.json的配置方式。

一、分类管理

根据package.json规范,依赖包被大致分为以下几种:dependencies、devDependencies、optionalDependencies、peerDependencies和bundledDependencies总共5种。dependencies和devDependencies这两项是我们使用较为频繁的。

1、dependencies

工程在生产环境下也需要使用的依赖,例如react、antd等,使用npm安装插件时,会默认写入dependencies,也可以使用-P或--save-prod后缀。

2、devDependencies

工程只有开发环境需要,生产环境不需要的依赖,例如eslint、babel等,使用-D或--save-dev来写入devDependencies。

3、optionalDependencies

顾名思义,依赖是可选的,它们只有在运行时需要使用某些功能时才会被引入。通常用于实现某些可选的功能或优化。例如,一个包可能依赖于某个库来实现某种高级功能,但是这个库在某些环境下不存在或不可用。在这种情况下,可以将该库声明为可选依赖项,并在代码中检查该依赖项是否存在,然后根据情况来决定是否使用该高级功能。使用这个功能的工程比较少,使用-O或--save-optional来写入optionalDependencies。

4、peerDependencies

工程需要和这个依赖配套使用,一般用于解决插件依赖的核心库的版本和主项目依赖的核心库的版本不一致的问题,常见于开发配套插件。例如vuex@4.1.0声明了:

"peerDependencies": {   "vue": "^3.2.0"}

表明vuex@4.1.0需要和vue@^ 3.2.0一起安装和使用,否则可能会出现异常。使用-O或--save-optional来写入optionalDependencies。

5、bundledDependencies

工程依赖于某些特定的依赖项,并且希望在运行时不必再次下载它们,则可以使用该选项。npm pack会将这些依赖一同放入生成的包中,并且在npm install时本工程,这些依赖项也会被一同安装。使用-B或--save-bundle来写入bundledDependencies。

看到这里你可能会有点疑问,为什么npm没有提供类似--save-peer的指令来写入peerDependencies呢?原因是peerDependencies暗示本工程将会被其他主模块使用,但是主模块本身并不需要在项目代码中显式使用。因此官方没有支持这一指令。

二、版本管理

一般情况下,以上依赖配置(除了bundledDependencies)都需要指定依赖的版本号,版本号遵循semver语义化版本规范(Semantic Versioning)命名规则,可以用下图表示,如2.1.0、3.1.4-beta.2等。

当发生不兼容的 API 修改时,更新major位当做了向下兼容的功能性新增时,更新minor位当做了向下兼容的问题修正时,更新patch位

可选的-tags即先行版本号,可以作为发布正式版之前的版本,格式是在修订版本号后面加上一个连接号(-),再加上一连串以点(.)分割的标识符,标识符可以由英文、数字和连接号([0-9A-Za-z-])组成。

在 npm 的依赖的规则中,还有~、>、<、=、>=、<=、-、||、x、X、*等符号来描述适用的版本范围;

^ :表示只锁定major,不小于指定版本号的版本范围。例如^1.1.0,代表>=1.1.0 <2.0.0的版本范围。

~ :表示锁定major和minor,不小于指定版本号的版本号。例如~1.1.0,代表>=1.1.0 <1.2.0的版本范围。

x、X、*:表示通配符。例如1.1.x,也代表>=1.1.0 <1.2.0的版本范围。

默认情况下,若指定了一个版本范围,npm会在范围内安装最新版本的依赖。当使用 npm install XX 时,会安装当前最新版本,并在版本号前默认加上 ^ 符号。因此在安装运行老项目时,很容易出现安装依赖后,项目启动报错的情况,原因就是某些依赖没有做到很好的向下兼容,导致重新安装的版本太高造成兼容性错误,此时需要定位错误依赖并回退版本。

三、npm install加载机制

npm install核心流程大致分为以下5步:

1、npm 向 registry 查询依赖压缩包的网址。2、下载压缩包,存放在cache目录,供下次安装时使用。3、解压压缩包到当前项目的node_modules目录。4、把所有安装的包信息写入package-lock.json,供下次安装时使用。5、继续处理依赖的依赖。

install的过程速度也和每一个步骤息息相关:(1)共享工程package-lock.json,可以避免向registry查询的步骤,并且保证不同环境下安装包的一致性。(2)使用下载速度快的registry镜像(例如jd镜像)。(3)预先进行依赖关系分析构建依赖关系,然后最后再并行下载(例如yarn)。

希望以上的介绍能够帮助你更好的理解npm的依赖管理。

关键词:

相关文章

热文推荐

即时看!Node工程的依赖包管理方式
即时看!Node工程的依赖包管理方式

在前端工程化中,JavaScript依赖包管理是非常重要的一......更多>

中南建设为子公司文昌中南、芜湖荣众合计担保7952万元 天天速看
中南建设为子公司文昌中南、芜湖荣众合计担保7952万元 天天速看

截至公告日,中南建设及控股子公司对外担保余额为427......更多>

广东统计局:一季度广东实现地区生产总值突破3万亿,工业生产增速转正|世界快报
广东统计局:一季度广东实现地区生产总值突破3万亿,工业生产增速转正|世界快报

上证报中国证券网讯4月23日,广东统计局发布2023年一......更多>

全球微头条丨我国已有20个省份、40余条线路开展车路协同智慧高速公路建设
全球微头条丨我国已有20个省份、40余条线路开展车路协同智慧高速公路建设

新华社北京4月23日电(记者叶昊鸣)智慧高速公路是交......更多>

排行推荐

生态环境部:今年一季度全国地表水水质提升
生态环境部:今年一季度全国地表水水质提升
上证报中国证券网讯据生态环境部4月23日消息,生态环... 更多>
第九章 无眠之夜
第九章 无眠之夜
【在这个被堕渊的侵蚀的世界,死亡,变得不再是一切的... 更多>
【速看料】东吴证券给予信德新材买入评级 2022年年报及2023年一季报点评:Q1单位盈利承压 业绩略低于市场预期
【速看料】东吴证券给予信德新材买入评级 2022年年报及2023年一季报点评:Q1单位盈利承压 业绩略低于市场预期
东吴证券04月23日发布研报称,给予信德新材(301349 ... 更多>
新华三与UNICON.UZ签署战略合作协议 焦点短讯
新华三与UNICON.UZ签署战略合作协议 焦点短讯
4月21日,紫光股份旗下新华三集团与乌兹别克斯坦UNICO... 更多>
海关总署副署长王令浚会见克罗地亚外交部国务秘书马图斯奇 当前焦点
据海关发布微信公众号,海关总署副署长王令浚21日上午... 更多>
证监会核发首批企业债券注册批文 短讯
据证监会官网,证监会对国家发展改革委移交的34个企业... 更多>
宁静的快乐 每日快报
前几天和朋友去看盆景。朋友随口说了一句,这么小的一... 更多>
香港特首李家超访问比亚迪深圳总部|头条焦点
4月22日,香港特首李家超参观了比亚迪深圳总部,乘坐... 更多>
热消息:当AI已成往事,系统会自动再平衡:(第1023篇周策略)2023.04.23
$银华天玑-悄悄盈(TIA05031)$$银华天玑-年年红(TIAA04... 更多>
人工智能和Ai产业链是一场财富的再分配
1:创业板左侧第一个蓝色圈处是2022年4 22-4 30号,... 更多>
财报季最后一周!海天味业、迈瑞医疗、五粮液业绩将揭晓,你更期待哪一家?|一周财报前瞻|每日速讯
四月末,A股上市公司年报披露接近尾声。同花顺数据显... 更多>
2023广东省博物馆五一展览活动有哪些?
2023广东省博物馆五一展览活动有哪些?一眼千万年——... 更多>
捷达VS7什么平台_捷达vs7是什么平台打造的 焦点快看
1、捷达vs7是基于大众的mqb平台打造的。捷达vs7是捷达... 更多>
【快播报】后背毛囊炎怎么治好_后背毛囊炎怎么治
1、背部毛囊炎的治疗有以下几个方面。2、1 一般治疗... 更多>

热推荐:一年级家长会心得简短100字

维生素e可以擦脸吗有什么效果_维生

环球速递!福建白水洋图片_白水洋在

天天关注:暁_对于暁简单介绍

当前热点-晾鹰台集蒙古诸部落慰劳遣

晾马台村_对于晾马台村简单介绍

【安委办动态】石湖荡镇恬润新苑开

每日速读!宇环数控:签订1.07亿元日

世界播报:深圳一季度末人民币贷款余

全球即时:鄱阳湖水位今年首次突破1