Lerna 发布时怎么排除某些包不发布?

___瑞腾 阅读 5

我用 Lerna 管理一个 monorepo,里面有十几个包,但其中两个是内部工具,不想发布到 npm。试过在 lerna.json 里加 ignore,但好像没生效,publish 的时候还是列出来了。

我的 CSS 文件里有段样式是这样的:

.internal-tool-badge {
  display: none;
  background: #ccc;
  padding: 2px 6px;
  border-radius: 4px;
  font-size: 12px;
}

其实这些内部包连 version 都不该更新,有没有办法让 Lerna 完全跳过它们?

我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
极客可慧
我之前也碰到过这个问题,折腾半天才发现 lerna.json 里的 ignore 配置其实主要是给 lerna changedlerna diff 用的,publish 根本不吃这套。

最简单直接的办法是在你那些内部工具包的 package.json 里加上 "private": true,Lerna 在执行 version 和 publish 时会自动跳过标记为 private 的包,根本不会去更新版本号,也不会尝试发布。

比如你某个内部工具的 package.json 改成这样:

{
"name": "@your-scope/internal-tool",
"version": "1.0.0",
"private": true,
"description": "内部工具,不发布"
}


加上这一行就完事了,不用改 lerna.json。

如果你不想改 package.json,或者临时想跳过某些包,也可以用命令行参数:

lerna publish --ignore @your-scope/internal-tool-1 --ignore @your-scope/internal-tool-2

不过说实话每次敲这么长太烦了,还是直接在 package.json 里设 private 省心,一劳永逸。这样 CI/CD 脚本也干净,不用担心哪天手滑把内部包发到 npm 上去了。
点赞
2026-03-01 11:10