dynamod
v2.0.0
Published
Generate NestJS dynamic module boilerplate via cli
Downloads
19
Maintainers
Readme
dynamod
Generate boilerplate for NestJS dynamic modules similar to how the native NestJS cli lets you create simple modules/services.
Usage
There are two main usages for this generator.
1. Generate a module within an existing project.
2. Generate a standalone package that you can build and publish to npm or use within your monorepo.
Usage within an existing NestJS project
# within /my-cool-project
npx dynamod <module name>
## example
npx dynamod banana
NOTE: this will place the directory within ./src
Output
./src
├──banana
├── banana.constants.ts
├── banana.module.ts
├── banana.service.ts
└── interfaces
├── banana-module.interfaces.ts
└── index.ts
Usage as package
This will create the directory as a kebab-case version of the module name.
mkdir examplemod
cd examplemod
npx dynamod examplemod --package
# or
npx dynamod examplemod -p
Output
./examplemod/
├── README.md
├── nest-cli.json
├── package.json
├── src
│ ├── __tests__
│ │ └── examplemod.spec.ts
│ ├── examplemod.constants.ts
│ ├── examplemod.module.ts
│ ├── examplemod.service.ts
│ ├── index.ts
│ └── interfaces
│ ├── examplemod-module.interfaces.ts
│ └── index.ts
├── tsconfig.build.json
└── tsconfig.json
Options
| Config | Flag | Output |
|--------|------|--------|
| Scaffold as standalone package| --package -p | Generate the module to be a standalone package (to publish to npm for example). Generates extra files: package.json, readme, and dotfiles. |
Final product either way sets you up with register
and registerAsync
methods in your module.
Use within your app
@Module({
// ...
imports: [
ConfigModule.forRoot(),
BananaModule.registerAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
someValue: configService.get<string>('SOME_VALUE'),
anotherValue: 'static config',
}),
inject: [ConfigService],
}),
],
// ...
})
Most of the boilerplate code is in the *.module.ts
file. The main part you will need to modify is the options and options interface that get passed into .register()
and .registerAsync()
.
You should not need to modify createAsyncProviders()
or .createAsyncProviders()
as they are private internally used methods to build the dynamic module.