angular - NX run-many-funktionen blockerar byggandet av vissa projekt när man använder flaggan 'watch'


Jag arbetar i en Angular-miljö tillsammans med NX. Jag har följande skript i min package.json för att bygga projektet:

"start:all": "nx run-many --target=build --projects=\"proj1,proj2,proj3,proj4\" --watch --skip-nx-cache"

När detta körs kommer det att köra proj2:build --watch och sedan börja övervaka projektet. Det börjar inte bygga de andra 3 projekten i denna situation.

Jag förstår att NX har sin övervakningsfunktion. Jag är osäker på om det finns ett bättre sätt jag skulle kunna utföra denna uppgift på det sättet, men det verkade mycket långsammare/verkar inte cacha resultat.


  • Jag försökte lägga till --parallel och --maxParallel=100, det löste inte problemet.

  • Jag försökte ta bort --watch-flaggan. Detta gjorde det möjligt att bygga alla projekt, men jag behöver övervakningsfunktionen.

  • Här är den konstigaste delen. Jag försökte ta bort projektet som det fastnade på, och det sa

Running target build for 3 projects and 1 task they depend on:

Och sedan byggde jag fortfarande den jag hade tagit bort (de andra beroendena beror på den), byggde korrekt två andra projekt, men lämnade ett annat projekt ospelat.


Jag antar att det finns något som behöver fixas i hur dessa är beroende av varandra på något sätt eller att jag behöver fixa hur de körs parallellt med varandra.

All information hjälper, tack!

Svar #1

Lösning :

I varje project.json, under "build"-sektionen, lägg till följande:

"dependsOn": [
   { "dependencies": false, "target": "build"}
],

I nx.json i "taskRunnerOptions" -> "default" -> "options", lägg till:

"parallel": 100

Resonemang :

Detta krävde lite sökande genom dokumentationen, men lösningen krävde slutligen två saker:

  1. Det parallella värdet måste vara tillräckligt högt.
  2. Alla projekt som är beroende av andra projekt får inte vänta på att deras byggnation ska slutföras.

Problemet var att proj1 och proj2 var beroende av proj3 och proj4, och väntade som standard på att deras build-funktion skulle slutföras. Men eftersom deras build-anrop hade --watch-flaggan kunde det inte slutföra build-anropet, och det där dependsOn uppfylldes aldrig.

Att sätta "dependencies": false i "dependsOn" tillåter att bygget anropas utan att vänta på att beroenden ska byggas

Källa: https://nx.dev/reference/project-configuration#examples