- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
本文由简悦SimpRead转码,原文地址
前两讲,我们围绕着npm和Yarn的原理展开了讲解,实际上npm和Yarn涉及项目的方方面
面,加之本身设计复杂度较高,这一讲我将继续讲解CI环境上的npm优化以及工程化相关问题。
希望通过这一讲的学习你能够学习到CI环境上使用包管理工具的方方面面,并能够解决非本地环境下
(一般是在容器上)使用包管理工具解决相关问题。
CI环境上的npm优化
CI环境下的npm配置和开发者本地npm操作有些许不同,接下来我们一起看看CI环境上的npm相
关优化。
合理使用npmci和npminstall
顾名思义,npmci就是专门为CI环境准备的安装命令,相比npminstall它的不同之处在于:
npmci要求项目中必须存在package-lock.json或npm-shrinkwrap.json;
npmci完全根据package-lock.json安装依赖,这可以保证整个开发团队都使用版本完全一致的
依赖;
正因为npmci完全根据package-lock.json安装依赖,在安装过程中,它不需要计算求解依赖满
足问题、构造依赖树,因此安装过程会更加迅速;
npmci在执行安装时,会先删除项目中现有的node_modules,然后全新安装;
npmci只能一次安装整个项目所有依赖包,无法安装单个依赖包;
如果package-lock.json和package.json,那么npmci会直接报错,并非更新lockfiles;
npmci不会改变package.json和package-lock.json。
基于以上特性,我们在CI环境使用npmci代替npminstall,一般会获得更加稳定、一致和迅速的安
装体验。
npmci的内容你也可以在官网查看。
使用package-lock.json优化依赖安装时间
上面提到过,对于应用项目,建议上传package-lock.json到仓库中,以保证依赖安装的一致性。事实
上,如果项目中使用了package-lock.json一般还可以显著加速依赖安装时间。这是因为package-
lock.json中已经缓存了每个包的具体版本和,你不需要再去仓库进行查询,即可直接进
入文件完整性校验环节,减少了大量网络请求。
除了上面所述内容,CI环境上,缓存node_modules文件也是企业级使用包管理工具常用的优化做
法。
工程化相关问题解析
下面这部分,我将通过剖析几个问题,来加深你对这几讲学习概念的理解,以及对工程化中可能遇到的
问题进行预演。
为什么要lockfiles,要不要提交lockfiles到仓库?
从npmv5版本开始,增加了package-lock.json文件。我们知道package-lock.json文件的作用是锁
定依赖安装结构,目的是保证在任意机器上执行npminstall都会得到完全相同的node_modules安
装结果。
你需要明确,为什么单一的package.json不能确定唯一的依赖树:
不同版本的npm的安装依赖策略和算法不同;
npminstall将根据package.json中的semver-rangeversion更新依赖,某些依赖项自上次安装
以来,可能已发布了新版本。
因此,保证能够完整准确地还原项目依赖,就是lockfiles出现的。
首先我们了解一下package-lock.json的作用机制。上一讲中我们已经解析了yarn.lock文件结构,这
里我们看下package-lock.json的内容举例:
@babel/core:{
version:7.2.0,
resolved:,
integrity:sha1-pN04FJAZmOkzQPAIbphn/voWOto=,
dev:true,
requires:{
@babel/cod
文档评论(0)