Plugin Object

The Modern.js Module plugin is an object, and the object contains the following properties.

  • name: The name of the plugin, a unique identifier.
  • setup: plugin initialization function, which will be executed only once. setup function can return a Hooks object, and Modern.js Module will execute the function corresponding to the Hook defined on the Hooks object at a specific time.

For example, in the following plugin code example, the beforeBuild function is triggered before the project starts the build task and the build start log is printed.

. /plugins/demo.tsx
import type { CliPlugin, ModuleTools } from '@modern-js/module-tools';

const myPlugin: CliPlugin<ModuleTools> = {
  name: 'my-plugin',

  setup() {
    return {
      // this is hook
      beforeBuild: () => {
        console.info('build start');
      },
    };
  },
};
modern.config.ts
import { myPlugin } from '. /plugins/demo';
export default {
  plugins: [myPlugin()],
};

Plugin type definitions

When using TypeScript, you can introduce the built-in CliPlugin and ModuleTools types to provide the correct type derivation for plugins: ``

import type { CliPlugin, ModuleTools } from '@modern-js/module-tools';

const myPlugin: CliPlugin<ModuleTools> = {
  name: 'my-plugin',

  setup() {
    const foo = '1';

    return {
      // this is hook
      afterBuild: () => {
        //...
      },
    };
  },
};

Plugin configuration options

It is recommended to write the plugin as a function, so that the plugin can receive configuration options via function entry.

import type { CliPlugin, ModuleTools } from '@modern-js/module-tools';

type MyPluginOptions = {
  foo: string;
};

const myPlugin = (options: MyPluginOptions): CliPlugin<ModuleTools> => ({
  name: 'my-plugin',

  setup() {
    console.log(options.foo);
  },
});