插件对象

Modern.js Module 的插件是一个对象,对象包含以下属性:

  • name:插件的名称,唯一标识符。
  • setup:插件初始化函数,只会执行一次。setup 函数可以返回一个 Hooks 对象,Modern.js Module 会在特定的时机执行 Hooks 对象上定义的 Hook 对应的函数。

例如在下面的插件代码示例中,在项目开始执行构建任务之前会触发 beforeBuild 函数的执行,并打印 build start 的 log 内容。

./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()],
};

插件类型定义

使用 TypeScript 时,可以引入内置的 CliPluginModuleTools 类型,为插件提供正确的类型推导:

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: () => {
        //...
      },
    };
  },
};

插件配置项

建议将插件写成函数的形式,使插件能通过函数入参来接收配置项:

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);
  },
});