function getCompilerPlugins()

in packages/shared-config/src/getCompilerPlugins.ts [39:99]


function getCompilerPlugins(rootDir: string, config: Config, compiler: Compiler, transformOptions: TransformOptions) {
  const {
    sourceMap,
    transformPlugins = [],
    transforms = [],
    mode,
    compileIncludes,
    swcOptions,
    redirectImports,
    fastRefresh,
    cacheDir,
    polyfill,
    enableEnv,
    getRoutesFile,
  } = config;
  const compilerPlugins = [];

  // Add custom transform before swc compilation so the source code can be got before transformed.
  compilerPlugins.push(
    ...(transformPlugins.filter(({ enforce }) => !enforce || enforce === 'pre') || []),
    ...transforms.map((transform, index) => ({ name: `transform_${index}`, transform, transformInclude })),
  );
  const clientBundlers = ['webpack', 'rspack'];
  // Use webpack loader instead of webpack plugin to do the compilation.
  // Reason: https://github.com/unjs/unplugin/issues/154
  if (swcOptions && !clientBundlers.includes(compiler)) {
    compilerPlugins.push(compilationPlugin({
      rootDir,
      cacheDir,
      sourceMap,
      fastRefresh,
      mode,
      compileIncludes,
      compileExcludes,
      swcOptions,
      polyfill,
      enableEnv,
      getRoutesFile,
    }));
  }

  compilerPlugins.push(
    ...(transformPlugins.filter(({ enforce }) => enforce === 'post') || []),
  );

  // Add redirect import after compilationPlugin.
  if (redirectImports) {
    compilerPlugins.push(redirectImportPlugin({
      sourceMap,
      exportData: redirectImports,
    }));
  }
  if (clientBundlers.includes(compiler)) {
    const transformPlugins = compilerPlugins
      .map((plugin) => createUnplugin(() => getPluginTransform(plugin, transformOptions))[compiler]()) as Config['plugins'];
    // Reverse the transformPlugins for rspack, because the unplugin order has been change in rspack mode.
    return compiler === 'rspack' ? transformPlugins.reverse() : transformPlugins;
  } else {
    return compilerPlugins.map(plugin => getPluginTransform(plugin, transformOptions));
  }
}