Lerna with watch tasks - lerna run --parallel

Viewed 2712

I have three packages:

  • A, depends on C
  • B, depends on C
  • C

When using lerna run build, C builds before A and B (good!)

But when I start a watch task lerna run watch, C never completes and therefor A and B dont get watched.

Using lerna run watch --parallel starts A, B and C at the same time but A and B both throw error because they cant find the dist folder from C (which C just deleted before rebuilding).

Is there any way to start watch tasks but still keep the order of dependencies like run normally does? Or at least delay some others?

2 Answers

Update: Based on the comment, I think I now understand whats happening. If you have build dependencies, they should sit in the same thread not concurrent threads, i.e. they should sequentially build.

However, you can still try it.. using the --noClean option in your build, it will not remove the dist folders! Then your parallel build will run.


Three settings: I would configure/double check (you didn't list your package.json) , so that lerna knows what order to follow

  1. First get your list in correct order for your peerDependencies
  2. Put those in the devDependencies
  3. of a given leaf package.json,

...The globs defined are relative to the directory that lerna.json lives in, which is usually the repository root. The only restriction is that you can't directly nest package locations, but this is a restriction shared by "normal" npm packages as well. And so... leaf packages under packages/* is considered a "best-practice"

enter image description here

Finally the topological order will then be user by lerna run in the build you can force it to include the dependencies --include-dependencies / or --include-dependents flag as needed, like so


Workaround option 2: for now to get past you can do...

lerna run build --concurrency 1

In my understanding, your watch jobs in a and b are not watching the node modules, especially the c dependency injected, and that result of this behavior.

Maybe if you add those directories to your watch job, you could find an efficient workaround.

Related