夜听城嚣 夜听城嚣
首页
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 前端基建与架构
  • 专题分享

    • Git入门与开发
    • 前端面试题汇总
    • HTML和CSS知识点
  • 项目实践
  • 抓包工具
  • 知识管理
  • 工程部署
  • 团队规范
bug知多少
  • 少年歌行
  • 青年随笔
  • 文海泛舟
  • 此事躬行

    • 项目各工种是如何协作的
    • TBA课程学习
收藏

dwfrost

前端界的小学生
首页
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 前端基建与架构
  • 专题分享

    • Git入门与开发
    • 前端面试题汇总
    • HTML和CSS知识点
  • 项目实践
  • 抓包工具
  • 知识管理
  • 工程部署
  • 团队规范
bug知多少
  • 少年歌行
  • 青年随笔
  • 文海泛舟
  • 此事躬行

    • 项目各工种是如何协作的
    • TBA课程学习
收藏
  • 导读
  • JS包管理工具和原理分析
  • yarn
  • CI环境上的npm优化
    • CI环境上的npm优化及更多工程化相关问题解析
      • CI环境上的npm ci特点
      • 为什么要lockfiles?
      • 要不要提交lockfiles到仓库?
      • 为什么有peerDependencies?
      • 最佳实践
  • 对比主流构建工具
  • Vite实现原理
  • core-js和polyfill
  • 梳理babel
  • 前端基建与架构
frost
2022-06-08

CI环境上的npm优化

# CI环境上的npm优化及更多工程化相关问题解析

# CI环境上的npm ci特点

  • npm ci要求项目中必须存在package-lock.json(npm v5.x新增)或npm-shrinkwrap.json(早期npm的方式)
  • npm ci完全依据package-lock.json安装依赖
  • 由于上述原因,npm ci在执行安装时,会先删除项目中现有的node_modules,然后重新安装。
  • npm ci只能一次安装整个项目所有依赖包,无法安装单个依赖包。
  • 如果package-lock.json和package.json冲突,则npm ci会直接报错,而不是更新lockfiles(package-lock.json或yarn.lock)。
  • npm ci不会改变package.json和package-lock.json。

优化:在CI环境使用npm ci代替 npm install。

# 为什么要lockfiles?

package-lock.json的好处:锁定依赖安装结构,缓存了每个包的具体版本和下载链接,不需要再去远程仓库进行查询。保证了在任意机器执行npm install 都会得到相同的node_modules。

如果仅package.json,则不同的npm版本,安装策略不同。另外,如果依赖自上次安装依赖,发布了新版本,则会进行更新(如果是主版本,不会更新)。

# 要不要提交lockfiles到仓库?

看项目决定。

  • 如果是业务开发,建议提交。
  • 如果是开发外部库,则不需要,此时可以复用主项目加载过的包,减少依赖重复和体积。
  • 开发库时,如果必须使用某个特定版本的依赖,更好的方式是使用peerDependencies。

# 为什么有peerDependencies?

  • 插件不能独立运行
  • 插件正确运行的前提是核心依赖库安装
  • 但不希望每次都下载核心依赖库,如果有就直接用
  • 插件API的设计必须符合核心依赖库的插件编写规范
  • 同一插件体系下,核心依赖库版本最好相同

# 最佳实践

  • 使用npm v5.4.2以上版本。
  • 搭建项目时,使用npm install <package>安装依赖,提交package.json和package-lock.json,不提交node_modules。
  • 使用 npm update 升级到最新的小版本
  • 使用npm install <package>@<version>升级大版本或降级
  • 也可以手动修改package.json中的版本号,执行npm install升级
  • 使用npm uninstall <package> 删除依赖
  • 不要手动修改package-lock.json
  • 如果有冲突,或者package-lock.json有问题,先删除package-lock.json,然后拉取远程lockfiles,再执行npm install。
#前端笔记
上次更新: 2022/06/09, 14:31:48
yarn
对比主流构建工具

← yarn 对比主流构建工具→

最近更新
01
提交代码时修改commit消息
04-09
02
如何快速定位bug
02-20
03
云端web项目开发踩坑
08-25
更多文章>
Theme by Vdoing | Copyright © 2021-2025 dwfrost | 粤ICP备2021118995号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×