我的webpack配置有DefinePlugin
个清晰度:
module.exports = env => {
const PROD = env.production;
const mode = env.mode || (PROD ? 'production' : 'development');
const plugins = [
new LicenseCheckerWebpackPlugin(...),
new CleanWebpackPlugin(...),
new webpack.BannerPlugin(...),
new CopyWebpackPlugin(...),
new MiniCssExtractPlugin(...),
new webpack.ProvidePlugin(...),
new webpack.DefinePlugin({
DEBUG: JSON.stringify(!PROD),
}),
new webpack.NormalModuleReplacementPlugin(...),
new VueLoaderPlugin(),
new ESLintPlugin(...),
];
return {
mode,
performance: {...},
entry: {...},
output: {...},
optimization: {
minimize: mode === 'production',
minimizer: [
new TerserPlugin({
terserOptions: {
compress: {
drop_console: true,
},
output: {
ascii_only: true,
},
},
}),
new CssMinimizerPlugin(),
],
},
stats: 'minimal',
watchOptions: { aggregateTimeout: 200 },
devtool: mode === 'production' ? false : 'inline-source-map',
resolve: {...},
module: {
rules: [...],
},
plugins,
};
};
JS代码:
import { MyDebugModule } from './my-debug-module';
if (DEBUG) {
MyDebugModule();
}
在最后的Bundle 包中没有调用MyDebugModule()
,但是当DEBUG
是false
时,webpack从my-debug-module.js
导入代码.
如果我完全删除代码if (DEBUG) { MyDebugModule(); }
,webpack就会删除my-debug-module
代码.
webpack@5.88.2
sideEffects
不影响导入的模块