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