Node Nx Tutorial - Step 4: Create Libraries
Libraries are not just a way to share code in Nx. They are also useful for factoring out code into small units with a well-defined public API.
Public API
Every library has an index.ts
file, which defines its public API. Other applications and libraries should only access what the index.ts
exports. Everything else in the library is private.
Controller libraries
To illustrate how useful libraries can be, create a new Auth library with a controller.
Run
nx g @nrwl/nest:lib auth --controller
You should see the following:
myorg/
├── apps/
│ └── todos/
├── libs/
│ ├── auth/
│ │ ├── jest.config.js
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── lib/
│ │ │ ├── auth.controller.spec.ts
│ │ │ ├── auth.controller.ts
│ │ │ └── auth.module.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.lib.json
│ │ └── tsconfig.spec.json
│ └── data/
├── tools/
├── nx.json
├── package.json
├── tsconfig.base.json
└── workspace.json
Modify the libs/auth/src/lib/auth.controller.ts
file like this:
1import { Controller, Get } from '@nestjs/common';
2
3@Controller('auth')
4export class AuthController {
5 @Get()
6 auth() {
7 return {
8 authenticated: true,
9 };
10 }
11}
12
Use the new library
Now import AuthModule
into apps/todos/src/app/app.module.ts
.
1import { Module } from '@nestjs/common';
2
3import { AppController } from './app.controller';
4import { AppService } from './app.service';
5import { TodosService } from './todos/todos.service';
6import { AuthModule } from '@myorg/auth';
7
8@Module({
9 imports: [AuthModule],
10 controllers: [AppController],
11 providers: [AppService, TodosService],
12})
13export class AppModule {}
14
Restart nx serve todos
then go to http://localhost:3333/auth. You should see { authenticated: true }
.
What's Next
- Continue to Step 5: Dep graph