Node Nx Tutorial - Step 3: Share Code

Nx.dev Tutorial | Node | Step 3: Share Code

Awesome! The application is working as expected!

Next, let's work on refactoring a bit. What we're planning to do is move the Todo type to it's own library. This is important if we want to share the type between multiple applications, without having to duplicate the same type everywhere.

Run the following generator to create a library:

nx g @nrwl/workspace:lib data

The result should look like this:

myorg/
├── apps/
│   └── todos/
├── libs/
│   └── data/
│       ├── src/
│       │   ├── lib/
│       │   │   └── data.ts
│       │   └── index.ts
│       ├── jest.config.js
│       ├── tsconfig.lib.json
│       ├── tsconfig.json
│       └── tsconfig.spec.json
├── tools/
├── nx.json
├── package.json
└── tsconfig.base.json

Copy the type into libs/data/src/lib/data.ts.

1export type Todo = {
2  message: string;
3  done: boolean;
4};

A note about VS Code :

If you're using VS Code it may be necessary at this point to restart the TS server so that the new @myorg/data package is recognised. This needs to be done every time a new workspace library is added.

Use the command palette with a *.ts file open and choose Restart TS Server.

Refactor the Todos Service

Now update apps/todos/src/app/todos/todos.service.ts to import the type:

1import { Injectable } from '@nestjs/common';
2import { Todo } from '@myorg/data';
3
4const todos: Todo[] = [
5  { message: 'Take out trash', done: false },
6  { message: 'Continue using Nx', done: false },
7];
8
9@Injectable()
10export class TodosService {
11  getTodos(): Todo[] {
12    return todos;
13  }
14}

Every time you add a new library, you have to restart nx serve. So restart nx serve todos and you should see the application running.