Mar*_*der 20 package node.js npm lerna
NPM 7.0.0 工作区是否不再需要 Lerna?
我对这个新的 npm 功能并没有真正的经验。
Npm/rfcs写道:
首先也是最重要的是,可以选择将问题集留给用户空间来解决,已经有非常流行的项目 Lerna 提供了其中的一些功能。
还可以选择仅支持此提案的安装(或 Lerna 命名的引导程序)方面,采用功能不太丰富的方法,但仍然可以实现改善管理多个子包的用户体验的基本目标,但是从在这个 RFC 的研究阶段收集的所有反馈来看,这个替代方案对于所涉及的维护者社区来说不太理想。
很高兴每一个答案和解释:)
jon*_*y89 25
NPM 7 已经发布,它支持工作区。他们还将在即将发布的版本中继续开发此域,
话虽如此,lerna
它具有比npm7
或yarn
工作区更多的高级功能,此外,还yarn
声明他们永远不会尝试替换诸如 之类的工具lerna
,而是打算实现处理工作区的核心逻辑,例如安装子包依赖项和包符号链接。我希望npm
做同样的事情。
一个很好的例子是命令:lerna changed
它为您提供自上次标记版本以来已更改的包列表,这对 CI/CD 非常有帮助。欢迎您探索lerna提供的额外命令。
迄今为止,npm7
与工作区相关的唯一命令实际上是npm i
/npm ci
这不是新命令,但它确实处理了嵌套包和符号链接。
我写了一篇文章,详细介绍了配置,以防您想使用 npm7迁移到monorepo,因此在没有 lerna 的情况下工作绝对是一种选择,与 lerna 相比,您可能需要在 CI/CD 方面做更多的工作并自行添加一些会影响嵌套包的开发脚本。此外,IMO lerna 更适合开发库而不是应用程序。
小智 16
答案是肯定的,您仍然需要 Lerna 或其他工具来补充 npm@7 工作区附带的功能。这些是 npm@7 工作区不处理的事情(截至撰写本答案时):
\n了解 monorepo 拓扑
\nnpm 工作区在一定程度上了解 monorepo 包拓扑。例如,工作空间知道 package-c 使用 package-a 和 package-b 作为其依赖项。但有一件小事需要记住:
\n$ npm run build --workspaces\n
Run Code Online (Sandbox Code Playgroud)\n该命令将运行npm run build
此命令将为所有 monorepo 包
让\xe2\x80\x99s 说package-a 依赖于package-b,而package-c 又依赖于package-a 和package-b。运行命令的执行顺序取决于您的workspaces
数组package.json
。所以如果你有这个:
$ npm run build --workspaces\n
Run Code Online (Sandbox Code Playgroud)\n那么构建顺序将是:
\n但正确的顺序应该是:
\n为了以正确的顺序构建内容,您应该确保在 package.json 中以正确的顺序列出它们:
\n{\n "workspaces": ["package-a", "package-b", "package-c"]\n}\n
Run Code Online (Sandbox Code Playgroud)\n更换管理层
\nLerna 可以检测 monorepo 中的更改,并为您提供已更改的包的列表。如果您只想对更改的包运行测试,这会很方便。npm@7 工作区还不能做这样的事情(2021 年 10 月 5 日)。
\n出版
\nLerna 可以管理包的版本控制和发布。具有两种不同的版本管理策略:固定版本和独立版本。它生成变更日志,并仅将更改的包发布到 npm。
\n当然还有更多内容,但这些是您在 npm@7 工作区之上仍然需要的主要内容。如果您使用 Lerna 或其他工具,那由您决定。
\n我已经记录了我在使用 Lerna 维护 JavaScript monorepo 时学到的所有东西我在一篇文章中它描述了 npm@7 引入后 monorepo 管理流程如何显着简化,但为什么我们仍然需要在其之上使用 Lerna 或其他工具。
\n 归档时间: |
|
查看次数: |
5189 次 |
最近记录: |