155 lines
5.0 KiB
Markdown
155 lines
5.0 KiB
Markdown
---
|
|
title: 'Node Standalone Tutorial - Part 3: Task-Running'
|
|
description: In this tutorial you'll create a backend-focused workspace with Nx.
|
|
---
|
|
|
|
# Node Standalone Tutorial - Part 3: Task-Running
|
|
|
|
Common tasks include:
|
|
|
|
- Building an application
|
|
- Serving an application locally for development purposes
|
|
- Running your unit tests
|
|
- Linting your code
|
|
|
|
When you ran your generators in Part 1, you already set up these more common tasks for each project.
|
|
|
|
## Defining Targets
|
|
|
|
Here's the `project.json` file for the `auth` project:
|
|
|
|
```json {% fileName="/auth/project.json" %}
|
|
{
|
|
"name": "auth",
|
|
"$schema": "../node_modules/nx/schemas/project-schema.json",
|
|
"sourceRoot": "auth/src",
|
|
"projectType": "library",
|
|
"targets": {
|
|
"build": {
|
|
"executor": "@nrwl/js:tsc",
|
|
"outputs": ["{options.outputPath}"],
|
|
"options": {
|
|
"outputPath": "dist/./auth",
|
|
"tsConfig": "auth/tsconfig.lib.json",
|
|
"packageJson": "auth/package.json",
|
|
"main": "auth/src/index.ts",
|
|
"assets": ["auth/*.md"]
|
|
}
|
|
},
|
|
"lint": {
|
|
"executor": "@nrwl/linter:eslint",
|
|
"outputs": ["{options.outputFile}"],
|
|
"options": {
|
|
"lintFilePatterns": ["auth/**/*.ts"]
|
|
}
|
|
},
|
|
"test": {
|
|
"executor": "@nrwl/jest:jest",
|
|
"outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
|
|
"options": {
|
|
"jestConfig": "auth/jest.config.ts",
|
|
"passWithNoTests": true
|
|
},
|
|
"configurations": {
|
|
"ci": {
|
|
"ci": true,
|
|
"codeCoverage": true
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": []
|
|
}
|
|
```
|
|
|
|
You can see that three targets are defined here: `build`, `test` and `lint`.
|
|
|
|
The properties of these targets are defined as follows:
|
|
|
|
- `executor` - which Nx executor to run. The syntax here is: `<plugin name>:<executor name>`
|
|
- `outputs` - this is an array of files that would be created by running this target. (This informs Nx on what to save for it's caching mechanisms you'll learn about in [4 - Task Pipelines](/node-tutorial/4-task-pipelines)).
|
|
- `options` - this is an object defining which executor options to use for the given target. Every Nx executor allows for options as a way to parameterize it's functionality.
|
|
|
|
## Running Tasks
|
|
|
|

|
|
|
|
Run the `build` target for your `auth` project:
|
|
|
|
```{% command="npx nx build auth" path="~/products-api" %}
|
|
|
|
> nx run auth:build
|
|
|
|
Compiling TypeScript files for project "auth"...
|
|
Done compiling TypeScript files for project "auth".
|
|
|
|
———————————————————————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
|
> NX Successfully ran target build for project auth (1s)
|
|
```
|
|
|
|
You can now find your built `auth` distributable in your `dist/auth/` directory, as specified in the `outputPath` property of the `build` target options in your `project.json` file.
|
|
|
|
Next, run a lint check on `auth`:
|
|
|
|
```{% command="npx nx lint auth" path="~/products-api" %}
|
|
|
|
> nx run auth:lint
|
|
|
|
|
|
Linting "auth"...
|
|
|
|
All files pass linting.
|
|
|
|
|
|
———————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
|
> NX Successfully ran target lint for project products-api (777ms)
|
|
```
|
|
|
|
## Run e2e Tests
|
|
|
|
To run the e2e tests, you first need to serve the root `products-api` project:
|
|
|
|
```{% command="npx nx serve products-api" path="~/products-api" %}
|
|
> nx run products-api:serve
|
|
|
|
Debugger listening on ws://localhost:9229/5ee3e454-1e38-4d9b-a5de-64a4cb1e21b9
|
|
Debugger listening on ws://localhost:9229/5ee3e454-1e38-4d9b-a5de-64a4cb1e21b9
|
|
For help, see: https://nodejs.org/en/docs/inspector
|
|
[ ready ] http://localhost:3000
|
|
[ watch ] build succeeded, watching for changes...
|
|
```
|
|
|
|
Then you can run the e2e tests from the `e2e` project in a separate terminal:
|
|
|
|
```{% command="npx nx e2e e2e" path="~/products-api" %}
|
|
> nx run e2e:e2e
|
|
|
|
Determining test suites to run...
|
|
Setting up...
|
|
|
|
PASS e2e e2e/src/server/server.spec.ts
|
|
GET /
|
|
✓ should return a message (39 ms)
|
|
POST /auth
|
|
✓ should return a status and a name (19 ms)
|
|
|
|
Test Suites: 1 passed, 1 total
|
|
Tests: 2 passed, 2 total
|
|
Snapshots: 0 total
|
|
Time: 0.263 s, estimated 1 s
|
|
Ran all test suites.
|
|
|
|
Tearing down...
|
|
|
|
|
|
———————————————————————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
|
> NX Successfully ran target e2e for project e2e (2s)
|
|
```
|
|
|
|
## What's Next
|
|
|
|
- Continue to [4: Task Pipelines](/node-tutorial/4-task-pipelines)
|