Plugin Lifecycle
Since a VendurePlugin is built on top of the Nestjs module system, any plugin (as well as any providers it defines) can make use of any of the Nestjs lifecycle hooks:
- onModuleInit
- onApplicationBootstrap
- onModuleDestroy
- beforeApplicationShutdown
- onApplicationShutdown
Note that lifecycle hooks are run in both the server and worker contexts. If you have code that should only run either in the server context or worker context, you can inject the ProcessContext provider.
Configure
Another hook that is not strictly a lifecycle hook, but which can be useful to know is the configure
method which is used by NestJS to apply middleware. This method is called only for the server and not for the worker, since middleware relates to the network stack, and the worker has no network part.
Example
import { MiddlewareConsumer, NestModule, OnApplicationBootstrap } from '@nestjs/common';
import { EventBus, PluginCommonModule, VendurePlugin } from '@vendure/core';
@VendurePlugin({
imports: [PluginCommonModule]
})
export class MyPlugin implements OnApplicationBootstrap, NestModule {
constructor(private eventBus: EventBus) {}
configure(consumer: MiddlewareConsumer) {
consumer
.apply(MyMiddleware)
.forRoutes('my-custom-route');
}
async onApplicationBootstrap() {
await myAsyncInitFunction();
this.eventBus
.ofType(OrderStateTransitionEvent)
.subscribe((event) => {
// do some action when this event fires
});
}
}