带有监视任务的 Lerna - lerna run --parallel
Posted
技术标签:
【中文标题】带有监视任务的 Lerna - lerna run --parallel【英文标题】:Lerna with watch tasks - lerna run --parallel 【发布时间】:2021-04-30 16:48:38 【问题描述】:我有三个包:
A
,取决于C
B
,取决于C
C
使用 lerna run build
时,C
在 A
和 B
之前构建(好!)
但是当我开始监视任务lerna run watch
,C
永远不会完成,因此A
和B
不会被监视。
使用lerna run watch --parallel
同时启动A
、B
和C
,但A
和B
都抛出错误,因为它们无法从C
找到dist 文件夹(其中C
只是在重建之前删除)。
有什么方法可以启动监视任务,但仍然像正常运行一样保持依赖关系的顺序?或者至少延迟一些其他的?
【问题讨论】:
我认为parallel
不保证构建过程的顺序。
这能回答你的问题吗? Lerna specify run order
没有怎么办?使用并行会导致上述问题。在观看C
时不使用并行结果,但从不观看A
和B
,因为C
的观看任务永远不会完成
也许没有办法做到这一点。最后我先看了C
,然后是其余的。另一种解决方案是确保在构建时 dist 不会被删除,但事件最初没有 dist,因此需要在 watch 之前完成构建。
我认为它是这样回答的:"类似于--stream
,但完全不考虑并发和拓扑排序,在所有匹配的包中立即运行给定的命令或脚本,并带有前缀流输出。”
【参考方案1】:
据我了解,您在 a 和 b 中的监视作业没有监视节点模块,尤其是注入的 c 依赖项,以及此行为的结果。
也许如果您将这些目录添加到您的监视作业中,您可以找到一个有效的解决方法。
【讨论】:
没有问题是每个监视任务在开始监视时都会删除其 dist 文件夹。然后所有监视任务同时开始构建,但找不到它们的依赖项......【参考方案2】:更新:根据评论,我想我现在明白发生了什么。如果您有构建依赖项,它们应该位于同一个线程而不是并发线程中,即它们应该按顺序构建。
但是,您仍然可以尝试.. 在您的构建中使用
--noClean
选项,它会 不删除 dist 文件夹!然后您的并行构建将运行。
三个设置:我会配置/仔细检查(你没有列出你的package.json
),以便lerna
知道要遵循什么顺序
-
首先以正确的顺序为您的
peerDependencies
获取您的列表
把那些放在devDependencies
给定叶子package.json
,
...The globs defined are relative to the directory that lerna.json lives in,通常是存储库根目录。唯一的限制是您不能直接嵌套包位置,但这也是“普通”npm 包所共有的限制。 所以...... packages/* 下的叶子包被认为是“最佳-练习”
最后,拓扑顺序将由lerna run
在构建中使用,您可以根据需要强制它包含依赖项--include-dependencies
/ 或--include-dependents
标志,例如so
解决方法选项 2:现在要过去,您可以做...
lerna run build --concurrency 1
【讨论】:
不确定你是否理解这个问题,但这与订单无关。如果我同时启动多个 WATCH 任务,那么每个任务都会删除它的 dist 文件夹,然后构建他们的应用程序并观看它。但是,当 dist 文件夹被删除时,应用程序无法找到它们的依赖项。您不能按任何顺序执行此操作,因为 lerna 不知道监视任务何时完成,因为它们永远不会完成。 @Mick 你试过--noClean
选项吗以上是关于带有监视任务的 Lerna - lerna run --parallel的主要内容,如果未能解决你的问题,请参考以下文章
Lerna 包和 PublishBuildArtifactsV1 任务
带有 Lerna + React + Styled 组件的 s-s-r