JavaScript Plugins
Js Plugins
A JavaScript plugin is simply a pure JavaScript object.
// farm.config.ts
import { defineConfig } from "@farmfe/core";
export default defineConfig({
  // ...
  plugins: [
    // a plugin object
    {
      name: "my-resolve-plugin",
      priority: 1000, // the priority of this plugin, the larger the value, the earlier the execution. Normally internal plugins is 100.
      resolve: {
        filters: {
          // Only execute the hook when following conditions satisfied
          sources: ["\\./index.ts"], // a regex array
          importers: ["None"],
        },
        executor: async (param) => {
          // this hook executor
          console.log(param); // resolve params
          // return the resolve result
          return {
            resolvedPath: "virtual:my-module",
            query: {},
            sideEffects: false,
            external: false,
          };
        },
      },
    },
    // load, transform are similar to resolve, refer to their types
  ],
});
If you want to pass args to your plugins,you can use a closure.
// my-resolve-plugin.ts
export function myResolvePlugin(options: Options) {
  const { xx } = options;
  return {
    name: "my-resolve-plugin",
    resolve: {
      // ...
    },
  };
}
// farm.config.ts
import { defineConfig } from "@farmfe/core";
import { myResolvePlugin } from "./myResolvePlugin.ts";
export default defineConfig({
  // ...
  plugins: [myResolvePlugin({ xx: "xx" })],
});
