带有监视任务的 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 时,CAB 之前构建(好!)

但是当我开始监视任务lerna run watchC 永远不会完成,因此AB 不会被监视。

使用lerna run watch --parallel 同时启动ABC,但AB 都抛出错误,因为它们无法从C 找到dist 文件夹(其中C只是在重建之前删除)。

有什么方法可以启动监视任务,但仍然像正常运行一样保持依赖关系的顺序?或者至少延迟一些其他的?

【问题讨论】:

我认为parallel 不保证构建过程的顺序。 这能回答你的问题吗? Lerna specify run order 没有怎么办?使用并行会导致上述问题。在观看C 时不使用并行结果​​,但从不观看AB,因为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 与 Yarn 工作区一起使用有啥优势吗?

Lerna 包和 PublishBuildArtifactsV1 任务

带有 Lerna + React + Styled 组件的 s-s-r

带有 Lerna 的纱线工作区仍在将包添加到子文件夹

Github 操作似乎无法在带有纱线工作区和 lerna 的 monorepo 中找到私有包

如何设置 GitHub 操作以发布 Lerna Monorepo