【问题标题】:Lerna with watch tasks - lerna run --parallel带有监视任务的 Lerna - 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,但完全不考虑并发和拓扑排序,在所有匹配的包中立即运行给定的命令或脚本,并带有前缀流输出。”

标签: javascript node.js angular lerna


【解决方案1】:

据我了解,您在 a 和 b 中的监视作业没有监视节点模块,尤其是注入的 c 依赖项,以及此行为的结果。

也许如果您将这些目录添加到您的监视作业中,您可以找到一个有效的解决方法。

【讨论】:

  • 没有问题是每个监视任务在开始监视时都会删除其 dist 文件夹。然后所有监视任务同时开始构建,但找不到它们的依赖项......
【解决方案2】:

更新:根据评论,我想我现在明白发生了什么。如果您有构建依赖项,它们应该位于同一个线程而不是并发线程中,即它们应该按顺序构建。

但是,您仍然可以尝试.. 在您的构建中使用 --noClean 选项,它会 删除 dist 文件夹!然后您的并行构建将运行。


三个设置:我会配置/仔细检查(你没有列出你的package.json),以便lerna 知道要遵循什么顺序

  1. 首先以正确的顺序为您的peerDependencies 获取您的列表
  2. 把那些放在devDependencies
  3. 给定叶子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 选项吗
猜你喜欢
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 2021-02-24
  • 2021-09-18
  • 2021-07-31
  • 1970-01-01
  • 2019-04-21
  • 2020-03-04
相关资源
最近更新 更多