lerna + yarn workspaces 使用备忘

CSDN 中文章不一定能及时更新,欢迎点击前往我的博客查看最新版本:许盛的博客

最近学了不少组件化相关的知识,需要编写一些 cli 工具、公共组件之类的,和以往大量的做业务项目,走 CI/CD 容器化部署不同,这类项目不需要容器化部署到某个平台,而是使用 npm publish 来发布。

正好学习学习 monorepo 的思想和 lerna 的使用,本文不讲概念,只是记录一下流程,作为个人的备忘录使用,忘记了就再来翻一翻。

初始化目录

首先创建项目,并安装相应的依赖

mkdir my-app && cd my-app

yarn init -y

yarn add -D lerna # 安装 lerna 为开发依赖

lerna init # 调用 lerna 初始化命令,生成 lerna.json 文件,创建 packages 目录

修改配置文件

执行 lerna init 命名后会生成默认的 lerna.json 文件,内容如下:

{
  "packages": [
    "packages/*"
  ],
  "version": "0.0.0"
}

默认情况下 lerna 并不会使用 yarn workspaces,我们需要修改下配置:

{
  "packages": [
    "packages/*"
  ],
  "version": "independent", // 每个包版本独立
  "npmClient": "yarn",
  "useWorkspaces": true, // 使用 yarn workspaces
	"message": "chore(release): publish" // lerna version 默认使用的 commit message 不符合 conventional commit 规范,修改一下
}

同时将 package.json 中的 private 字段设置为 true,加入 workspaces 字段,并删除 versionmain 等无用字段:

{
  "private": true,
  // 避免 root 被发布出去
  "workspaces": [
    "packages/*"
  ]
}

创建 package

可以使用 lerna create 命令快速创建新的 package

lerna create my-package -y

在新建的 packagepackage.json 文件中,加入 publishConfig 字段:

{
	...
	"publishConfig": {
		"access": "public" # 带 scope 的包需要设置为 public
	}
}

安装依赖

默认所有依赖都会被安装在根目录下的 node_modules 中,如果不同 package 的依赖有版本冲突问题,就会放在 packagenode_modules 中。

根目录下有一个 package.json 文件,各个 package 中又有自己的 package.json 文件,这时候其实依赖也可以分为全局和包两种级别了。

对于 devDependencies 依赖,装在全局还是包中其实区别不大,只是放在根目录下的 package.json 中方便统一维护版本,避免重复安装。

如果不同包对于某个 devDependencies 依赖没有特定的版本要求的话,建议直接装在根目录下。

但是 dependencies 就需要注意一下了, lerna 在发布时,会直接将 package 下的 package.json 原封不动发布出去,如果把 dependencies 写在根路径下的 package.json 中,开发的时候没有问题,但是发布出去被别人引用时,就缺失依赖了。

所以结论就是,对于 devDependencies 依赖,建议尽量装在根目录下:

yarn add -D -W <some-dev-dependency>

对于 dependencies ,在各个 package 中自行维护:

yarn workspaces <some-package> add <some-dependency>

执行命令

使用 yarn workspaces 的一个好处,就是可以快速调用所有 package 的某个命令,例如:

yarn workspaces run clean # 调用所有 package 的 clean 命令

所以可以在根目录的 package.json 中加入一些常用的命名:

{
	"scripts": {
		"build": "lerna run --stream --sort build", // 按照依赖拓扑进行构建
		"clean": "yarn workspaces run clean", // 彼此独立,可以并行执行
		"test": "yarn workspaces run test"
	}
}

常用命令

# 使用 lerna 标记版本,会根据哪些文件有变动,来提示你将哪些包的版本进行修改
# 并进行一次 git commit 提交,打上相应的 git tag
# 1. 更新包版本
# 2. git commit 和 git tag
# 3. 推送到 remote
lerna version

# 在上一步的基础上,生成 changelog 文件,以及根据 commit 来自动进行版本变动
lerna version --conventional-commits --yes

# lerna version 成功后,就可以使用 publish 命令发布到 npm 仓库中了
# 相当于 lerna version + lerna publish from-git
lerna publish

# 发布当前 commit 中打上 tag version 的包
lerna publish from-git

# 发布 package.json 中的 pkg.json 上的 version 在 registry(高于 latest version) 不存在的包
lerna publish from-packages
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值