diff --git a/docs/generated/packages/js/executors/node.json b/docs/generated/packages/js/executors/node.json index b93476e9bf..3c9b3ffbbe 100644 --- a/docs/generated/packages/js/executors/node.json +++ b/docs/generated/packages/js/executors/node.json @@ -21,7 +21,7 @@ }, "waitUntilTargets": { "type": "array", - "description": "The targets to run before starting the node app.", + "description": "The targets to run before starting the node app. Listed in the form :. The main target will run once all listed targets have output something to the console.", "default": [], "items": { "type": "string" } }, diff --git a/docs/shared/recipes/tips-n-tricks/wait-for-tasks.md b/docs/shared/recipes/tips-n-tricks/wait-for-tasks.md index 2c6bf2afda..ff8e09e68b 100644 --- a/docs/shared/recipes/tips-n-tricks/wait-for-tasks.md +++ b/docs/shared/recipes/tips-n-tricks/wait-for-tasks.md @@ -1,10 +1,16 @@ # Wait for Tasks to Finish -If you want to ensure that a set up task has been run before you run a particular task, you want to use the [`dependsOn` property](/reference/project-configuration#dependson). +There are a couple ways to ensure that a set up task has been run before you run a particular task. -For instance, if you have a React app called `store` and a database project called `db`, you may want to run `nx clean db` before you run `nx e2e store`. +The most common solution is to use the [`dependsOn` property](/reference/project-configuration#dependson). This works regardless of what executor the task is using. Once the dependent tasks have completed, the primary task will start. -To set that up, you would edit the `store` app's `project.json` file: +If you are using the `@nx/js:node` executor, you can also use the [`waitUntilTargets` option](/packages/js/executors/node#waituntiltargets) of that executor. Once the dependent tasks emit something to the console, the primary task will start. + +## dependsOn + +If you have a React app called `store` and a database project called `db`, you may want to run `nx clean db` before you run `nx e2e store`. + +To set that up, edit the `store` app's `project.json` file: {% tabs %} {% tab label="Version 16+" %} @@ -45,3 +51,24 @@ To set that up, you would edit the `store` app's `project.json` file: {% /tabs %} This will make it so that all you need to do is run `nx e2e store` and Nx will make sure that `nx clean db` is run first. + +## waitUntilTargets + +If you have a Node api called `api` and a database project called `db`, you may want to run `nx serve db` any time you run `nx serve api`. + +To set that up, edit the `api` app's `project.json` file: + +```json {% fileName="/apps/api/project.json" %} +{ + "targets": { + "serve": { + "executor": "@nx/js:node", + "options": { + "waitUntilTargets": ["db:serve"] + } + } + } +} +``` + +With this configuration in place, if you run `nx serve api`, Nx will first run `nx serve db`. The `nx serve api` process will not be launched until `nx serve db` outputs something to the console. Then both processes will continue executing in parallel. When you kill the main process, both the `db` and `api` processes will be stopped. diff --git a/packages/js/src/executors/node/schema.json b/packages/js/src/executors/node/schema.json index 4433bcb6d2..923c405757 100644 --- a/packages/js/src/executors/node/schema.json +++ b/packages/js/src/executors/node/schema.json @@ -18,7 +18,7 @@ }, "waitUntilTargets": { "type": "array", - "description": "The targets to run before starting the node app.", + "description": "The targets to run before starting the node app. Listed in the form :. The main target will run once all listed targets have output something to the console.", "default": [], "items": { "type": "string"