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.


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.


import { MiddlewareConsumer, NestModule, OnApplicationBootstrap } from '@nestjs/common';
import { EventBus, PluginCommonModule, VendurePlugin } from '@vendure/core';

    imports: [PluginCommonModule]
export class MyPlugin implements OnApplicationBootstrap, NestModule {

  constructor(private eventBus: EventBus) {}

  configure(consumer: MiddlewareConsumer) {

  async onApplicationBootstrap() {
    await myAsyncInitFunction();

      .subscribe((event) => {
        // do some action when this event fires