Node Nx Tutorial - Step 1: Create Application
In this tutorial you use Nx to build a server application out of common libraries using modern technologies.
This tutorial uses several Nx plugins to provide a rich dev experience. All the plugins are optional. Read about using Nx Core without plugins.
Create a New Workspace
Start by creating a new workspace.
npx create-nx-workspace@latest
You then receive the following prompts in your command line:
Workspace name (e.g., org name) myorg
What to create in the new workspace nest
Application name todos
You can also choose to add Nx Cloud, but its not required for the tutorial.
myorg/
āāā README.md
āāā apps/
ā āāā todos/
ā āāā jest.config.js
ā āāā src/
ā ā āāā app/
ā ā ā āāā app.controller.spec.ts
ā ā ā āāā app.controller.ts
ā ā ā āāā app.module.ts
ā ā ā āāā app.service.spec.ts
ā ā ā āāā app.service.ts
ā ā āāā assets/
ā ā āāā environments/
ā ā ā āāā environment.prod.ts
ā ā ā āāā environment.ts
ā ā āāā main.ts
ā āāā tsconfig.app.json
ā āāā tsconfig.json
ā āāā tsconfig.spec.json
āāā libs/
āāā tools/
āāā .eslintrc.json
āāā .prettierrc
āāā jest.config.js
āāā jest.preset.js
āāā nx.json
āāā package.json
āāā README.md
āāā tsconfig.base.json
āāā workspace.json
The generate command added one project to our workspace:
- A Nest application
Note on the Nx CLI
Depending on how your dev env is set up, the command above might result in Command 'nx' not found
.
To fix it, you can either install the nx
cli globally by running:
npm install -g nx
or
yarn global add nx
Or you can prepend every command with npm run
:
npx nx serve todos
or
yarn nx serve todos
Project.json, Targets, Executors
You configure your projects in project.json
files. These files contains the workspace projects with their command targets. For instance, todos
has the build
, serve
, lint
, and test
targets. This means that you can run nx build todos
, nx serve todos
, etc..
Every target uses an executor which actually runs this target. So targets are analogous to typed npm scripts, and executors are analogous to typed shell scripts.
Why not use shell scripts and npm scripts directly?
There are a lot of advantages to providing additional metadata to the build tool. For instance, you can introspect targets. nx serve todos --help
results in:
nx run todos:serve [options,...]
Options:
--buildTarget The target to run to build you the app
--waitUntilTargets The targets to run to before starting the node app (default: )
--host The host to inspect the process on (default: localhost)
--port The port to inspect the process on. Setting port to 0 will assign random free ports to all forked processes.
--watch Run build when files change (default: true)
--inspect Ensures the app is starting with debugging (default: inspect)
--runtimeArgs Extra args passed to the node process (default: )
--args Extra args when starting the app (default: )
--help Show available options for project target.
It helps with good editor integration (see VSCode Support).
But, most importantly, it provides a holistic dev experience regardless of the tools used, and enables advanced build features like distributed computation caching and distributed builds).
Serve the newly created application
Now that the application is set up, run it locally via:
nx serve todos
What's Next
- Continue to Step 2: Display todos