学习目标:
1)学习 release.js
源码,输出记录文档。
2) 熟悉发布流程
准备工作:
- Vue3 源码地址:
https://github.com/vuejs/vue-next
代码拉下来以后直接yarn
Vue3 Release
源码解读:https://juejin.cn/post/6997943192851054606
链接- 确保
Node.js
版本是 10+, 而且yarn
的版本是1.x Yarn 1.x
。
从 贡献指南
.github/contributing.md
了解到 Vue.js 采用的是 monorepo 的方式进行代码的管理。
但是vue3用的是Yarn Workspace
因为公司涉及到的项目都是一般项目,所以没有接触过,问了一下度娘,有几篇文章写的很清楚
- 【基于lerna和yarn workspace的monorepo工作流】基于lerna和yarn workspace的monorepo工作流
- 【Yarn Workspace 使用指南】Yarn Workspace 使用指南
Yarn Workspace
- arn 从 1.0 版开始支持
Workspace
(工作区) Workspace
可以统一管理有多个项目的仓库,- 可以在每个项目下使用独立的 package.json 管理依赖
- 可以yarn 命令安装或者升级所有依赖等
- 可以使多个项目共享同一个
node_modules
目录 - 提升开发效率和降低磁盘空间占用。
- 很多知名的开源项目也使用了
Yarn Workspace
,如vue
、react
、jest
等
// vue-next/package.json (多余的代码已省略)
{
"private": true,
"version": "3.2.2",
"workspaces": [
"packages/*"
],
"scripts": {
"release": "node scripts/release.js"
}
}
vue-next/scripts/release.js 文件代码解读
// 解析命令行参数
const args = require('minimist')(process.argv.slice(2))
// 文件模块
const fs = require('fs')
// 路径
const path = require('path')
/* 控制台 chalk 是一个可以给终端输出加上色彩的工具包,有了它,你的终端将变得五颜六色,花哨的一匹
* GitHub 地址: https://github.com/chalk/chalk
* npm i -D chalk
*/
const chalk = require('chalk')
/* semver 语义化版本 https://semver.org/lang/zh-CN/
* 版本格式:主版本号.次版本号.修订号,版本号递增规则如下:
* 主版本号:当你做了不兼容的 API 修改,
* 次版本号:当你做了向下兼容的功能性新增,
* 修订号:当你做了向下兼容的问题修正。
* 先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。
* 它的作用是用于版本校验比较。
*/
const semver = require('semver')
const currentVersion = require('../package.json').version
// 交互式询问用户输入。
const { prompt } = require('enquirer')
/* 执行子进程命令 就是在终端命令行执行命令
* execa是可以调用shell和本地外部程序的javascript封装。
* 会启动子进程执行。支持多操作系统,包括windows。如果父进程退出,则生成的全部子进程都被杀死
* 在第一期用的是 childProcess去执行
*/
const execa = require('execa')
// vue-next/scripts/release.js
// 对应 yarn run release --preid=beta
// beta
const preId =
args.preid ||
(semver.prerelease(currentVersion) && semver.prerelease(currentVersion)[0])
// 对应 yarn run release --dry
// true
const isDryRun = args.dry
// 对应 yarn run release --skipTests
// true 跳过测试
c