当前位置: 首页 > article >正文

lerna使用指南

lerna版本

以下所有配置命令都是基于v8.1.9,lerna v5 v7版本差别较大,在使用时,注意自身的lerna版本。

lerna开启缓存及缓存配置

nx缓存是v5版本以后才有的,小于该版本的无法使用该功能。

初始化配置

缓存配置文件nx.json,如果没有该配置文件,执行 lerna add-caching命令,会自动创建该文件。

{
  "targetDefaults": {
    "build": {
      "cache": true,
      "outputs": [
        "{projectRoot}/lib"
      ]
  }
}

需要对哪个执行脚本的输出结果进行缓存,就配置对应的命令。这里配置的是缓存build命令的结果。默认缓存输出目录是dist,如果不同,需自定义output目录。其中{projectRoot}为当前package的相对路径,不建议修改。如果需要整个工程目录,用{workspacesRoot}

缓存执行结果

当首次执行lerna run build --scope packageA时,会缓存对应的终端输出结果,以及对应的构建结果文件。在项目根目录会生成.nx文件夹,里面cache子目录下会存放对应的缓存数据。执行结果缓存放在cache目录下一个随机数目录。
在这里插入图片描述

缓存生成以后,下次执行build命令时,如果命中缓存,lerna不会实际执行npm脚本命令,而是从缓存中读取。

清除缓存

删除outputs对应目录下的文件,重新执行build命令,也不能真正重新执行npm,而是从缓存中重新创建对应的输出文件。如果想要清除缓存结果,执行npx nx reset

控制执行方式

如果当前工作区中有多个package,packageA中执行serve命令时,依赖packageB的构建结果,要怎么做?

// packageA 中某文件
import PackageB from 'packageB'
// ....

那我们希望在执行lerna run serve --scope packageA 时,如果packageB没有构建,可以先自动执行packageB的构建。通过配置nx.json中的dependsOn,可以达到。

{
  "targetDefaults": {
    "serve": {
      "dependsOn": [
        "^build"
      ]
    }
}

^build表示serve命令,依赖于先执行依赖构建命令。如上面代码示例中,packageA中依赖了packageB,会优先执行packageB的build命令。

工程依赖

如果想查看当前工程下,各个包之间的依赖关系,执行npx nx graph,可以查看包与包之间的依赖

发布包

Fixed: 固定包版本【默认】

lerna publish
当使用固定模式时,所有受影响的包将使用相同的版本发布。在单一版本号模式下运行,版本号在根目录lerna.json中。每次publish时,有更新的包会发布对应的version版本,如果包无更新,则不发布。如果主版本号是0开始,则每次会为所有子包发布新版本。

这样带来的一个问题是,当持续更新某一子包,而其他子包不更新时,Lerna将只对自上一个版本以来更改过的包进行版本和发布,这会导致包的版本随着时间的推移而漂移。
lerna publish --force-publish 可以解决版本漂移问题,强制为所有子包更新版本。

Independent: 独立包版本

npx lerna init --independent 独立模式Lerna项目允许维护者彼此独立地增加软件包版本。将lerna.json中的version设置为independent,使其运行在independent模式
lerna publish from-package 会比较所有包的当前版本与已发布的npm包版本,如果有更新,就会发布对应的包。


http://www.kler.cn/a/502215.html

相关文章:

  • 银河麒麟服务器操作系统桌面任务栏网络图标消失问题
  • 【论文阅读】MAMBA系列学习
  • torch.einsum计算张量的外积
  • Linux第二课:LinuxC高级 学习记录day01
  • 深入学习 Python 爬虫:从基础到实战
  • pyqt鸟瞰
  • Android中的Service
  • Docker的CMD指令
  • VMware虚拟机安装Home Assistant智能家居平台并实现远程访问保姆级教程
  • Android切换语言不退出App
  • 一个可以把玩的针对WebSocket分段的处理方案
  • 浅谈云计算07 | 云安全机制
  • 蓝桥杯历届真题 # 数字诗意(C++,Java)
  • React面试常见题目
  • C++中 为什么要把基类指针指向子类对象?
  • STM32 FreeRTOS的任务创建和删除
  • 2_CSS3 背景 --[CSS3 进阶之路]
  • vue集成导出 txt文本文档 和 excel文档 的方法
  • jsdom爬虫程序中eBay主页内容爬取的异步处理
  • 从epoll事件的视角探讨TCP:三次握手、四次挥手、应用层与传输层之间的联系
  • 【论文笔记】Sign Language Video Retrieval with Free-Form Textual Queries
  • IDEA的Git界面(ALT+9)log选项不显示问题小记
  • 基于Java的推箱子游戏设计与实现
  • 31_搭建Redis分片集群
  • React中Fiber树构建过程详解——react中render一个App组件(包含子组件)的流程详解
  • 深度学习中的常见初始化方法:原理、应用与比较