Lerna
目录
警告
本文最后更新于 2022-09-21,文中内容可能已过时。
Lerna is a fast, modern build system for managing and publishing multiple JavaScript/TypeScript packages from the same repository.
lerna 解决了哪些问题
-
调试问题
以往多个包之间需要通过 npm link 进行调试,lerna 可以通过动态创建软链直接进行模块的引入和调试。function createSymbolicLink(src, dest, type) { return fs .lstat(dest) .then(() => fs.unlink(dest)) .catch(() => { /* nothing exists at destination */ }) .then(() => fs.symlink(src, dest, type)); }
PS: linux 创建软链
ln -s source target
,注意 source 的路径如果为相对路径相对的是目标文件的路径 -
资源包升级。
一个项目依赖了多个 npm 包,当某一个子 npm 包代码修改升级时,都要对主干项目包进行升级修改。
常用命令
# 仓库初始化
lerna init
# 创建子包
lerna create <subpackage>
# 将本地包交叉链接在一起并安装剩余的包依赖项
lerna bootstrap
# 增加依赖 package 到最外层的公共 node_modules
lerna add <package>
# 增加依赖 package 到指定子包 subpackage
lerna add <package> --scope=<subpackage>
# lerna 执行传递的 shell 命令,与 npm 类似
lerna exec -- <shell>
leran exec --scope <subpackage> <shell> # 只对某个包执行 shell
# 执行 npm 脚本
lerna run <script>
# 显示所有子包
lerna ls
lerna ls --json
# 从所有包中删除 node_modules 目录(最外层公共的除外)
lerna clean
# 在当前项目中发布包
lerna publish
注意点
lerna
不会发布 package.json
中 private
属性为 true 的包。
lerna
默认使用集中版本,所有的包共用一个 version,如果需要 packages 下的子包使用不同的版本号,需要在 lerna.json
中配置 "version": "independent"
。
lerna publish
发布的是 packages/
下面的各个子项目。