lerna publish 就是将 monorepo 需要发布的包,发布到 npm registry 上面去。
分为几种不同的场景去运行:
lerna publish 永远不会发布 package.json 中 private 设置为 true 的包
lerna publish
# lerna version + lerna publish from-git
# 发布自上次发布来有更新的包(这里的上次发布也是基于上次执行lerna publish 而言)
lerna publish from-git
# 发布当前 commit 中打上 annoted tag version 的包(即 lerna publish from-git)
lerna publish from-packages
# 发布 package 中 package.json 上的 version 在 registry(高于 latest version)不存在的包
# 发布在最近 commit 中修改了 package.json 中的 version (且该 version 在 registry 中没有发布过)的包(即 lerna publish from-package)
-
from-git
即根据git commit
上的annotaed tag
进行发包 -
from-package
即根据 lerna 下的 package 里面的 pkg.json 的 version 变动来发包 -
--canary
发测试版本的包 -
剩下不带参数的情况就直接走一个 bump version(即执行 lerna version)
思维导图
configureProperties -> initialize -> execute
在 lerna 中,几乎所有子命令源码的执行顺序都是按照这样一个结构在进行,lerna 本身作为一个 monorepo,主要是使用 core 核心中的执行机制来去分发命令给各个子项目去执行