0
0
NestJSframework~10 mins

Module re-exporting in NestJS - Step-by-Step Execution

Choose your learning style9 modes available
Concept Flow - Module re-exporting
Create Module A
Export Providers/Components
Create Module B
Import Module A in Module B
Re-export Module A from Module B
Other Modules Import Module B
Access Providers from Module A via Module B
This flow shows how one module exports its providers, another module imports and re-exports it, so other modules can access the original providers through the re-exporting module.
Execution Sample
NestJS
import { Injectable, Module } from '@nestjs/common';

@Injectable()
class ServiceA {}

@Module({
  providers: [ServiceA],
  exports: [ServiceA],
})
export class ModuleA {}

@Module({
  imports: [ModuleA],
  exports: [ModuleA],
})
export class ModuleB {}
ModuleA exports ServiceA. ModuleB imports and re-exports ModuleA, so other modules importing ModuleB get ServiceA.
Execution Table
StepActionModule StateExports AvailableEffect
1Define ModuleA with ServiceA provider and export ServiceAModuleA createdServiceAServiceA is available to modules importing ModuleA
2Define ModuleB importing ModuleA and re-exporting ModuleAModuleB createdModuleAModules importing ModuleB get ServiceA indirectly
3Another module imports ModuleBOtherModule createdServiceA (via ModuleB)OtherModule can inject ServiceA without importing ModuleA directly
4Use ServiceA in OtherModuleServiceA injectedServiceAServiceA functionality accessible in OtherModule
5EndNo further changesNo changeExecution stops
💡 All modules defined and re-exporting completed, no further steps
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
ModuleA.exports[][ServiceA][ServiceA][ServiceA][ServiceA]
ModuleB.imports[][][ModuleA][ModuleA][ModuleA]
ModuleB.exports[][][ModuleA][ModuleA][ModuleA]
OtherModule.imports[][][][ModuleB][ModuleB]
OtherModule.availableProviders[][][][ServiceA][ServiceA]
Key Moments - 2 Insights
Why does OtherModule get access to ServiceA even though it only imports ModuleB?
Because ModuleB re-exports ModuleA, which exports ServiceA. So importing ModuleB also imports ModuleA's exports indirectly, as shown in execution_table step 3.
What happens if ModuleB imports ModuleA but does not re-export it?
OtherModule importing ModuleB would NOT get ServiceA automatically. It must import ModuleA directly to access ServiceA. This is because re-exporting is needed to pass exports along, as seen in execution_table step 2.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 2. What does ModuleB export?
AServiceA directly
BModuleA
CNothing
DServiceA and ModuleA
💡 Hint
Check the 'Exports Available' column at step 2 in execution_table
At which step does OtherModule gain access to ServiceA?
AStep 3
BStep 1
CStep 2
DStep 4
💡 Hint
Look at the 'Module State' and 'Exports Available' columns for OtherModule in execution_table
If ModuleB did not re-export ModuleA, what would OtherModule's available providers be after step 3?
A[ServiceA]
B[ModuleA]
C[]
D[ModuleB]
💡 Hint
Refer to key_moments about re-exporting necessity and execution_table step 2
Concept Snapshot
Module re-exporting in NestJS:
- ModuleA exports providers (e.g., ServiceA)
- ModuleB imports ModuleA and re-exports it
- Other modules importing ModuleB get access to ModuleA's exports
- Re-exporting passes exports through modules
- Without re-export, imports don't pass exports along
Full Transcript
Module re-exporting in NestJS means one module (ModuleB) imports another module (ModuleA) and then re-exports it. This allows other modules to import ModuleB and still get access to the providers exported by ModuleA. The flow starts by defining ModuleA with providers and exports. Then ModuleB imports and re-exports ModuleA. When another module imports ModuleB, it can use the providers from ModuleA without importing ModuleA directly. This is useful to organize and simplify module dependencies. The key is that re-exporting passes exports along the chain. Without re-exporting, the exports are not available to modules importing only the intermediate module.