34 lines
1.0 KiB
TypeScript
34 lines
1.0 KiB
TypeScript
import webpack, { type Compiler } from 'webpack';
|
|
|
|
const PLUGIN_NAME = 'BuildModeWebpack';
|
|
|
|
export class BuildModeWebpackPlugin {
|
|
apply(compiler: webpack.Compiler) {
|
|
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
compilation.hooks.processAssets.tap(
|
|
{
|
|
name: PLUGIN_NAME,
|
|
stage: webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS,
|
|
},
|
|
async () => {
|
|
const assets = compilation.getAssets();
|
|
for (const asset of assets) {
|
|
if (asset.name.endsWith('plugin.json')) {
|
|
const pluginJsonString = asset.source.source().toString();
|
|
const pluginJsonWithBuildMode = JSON.stringify(
|
|
{
|
|
...JSON.parse(pluginJsonString),
|
|
buildMode: compilation.options.mode,
|
|
},
|
|
null,
|
|
4
|
|
);
|
|
compilation.updateAsset(asset.name, new webpack.sources.RawSource(pluginJsonWithBuildMode));
|
|
}
|
|
}
|
|
}
|
|
);
|
|
});
|
|
}
|
|
}
|