为什么webpack会导入死的JavaScript代码?

dsf9zpds  于 2023-10-14  发布在  Java
关注(0)|答案(1)|浏览(169)

我的webpack配置有DefinePlugin定义:

  1. module.exports = env => {
  2. const PROD = env.production;
  3. const mode = env.mode || (PROD ? 'production' : 'development');
  4. const plugins = [
  5. new LicenseCheckerWebpackPlugin(...),
  6. new CleanWebpackPlugin(...),
  7. new webpack.BannerPlugin(...),
  8. new CopyWebpackPlugin(...),
  9. new MiniCssExtractPlugin(...),
  10. new webpack.ProvidePlugin(...),
  11. new webpack.DefinePlugin({
  12. DEBUG: JSON.stringify(!PROD),
  13. }),
  14. new webpack.NormalModuleReplacementPlugin(...),
  15. new VueLoaderPlugin(),
  16. new ESLintPlugin(...),
  17. ];
  18. return {
  19. mode,
  20. performance: {...},
  21. entry: {...},
  22. output: {...},
  23. optimization: {
  24. minimize: mode === 'production',
  25. minimizer: [
  26. new TerserPlugin({
  27. terserOptions: {
  28. compress: {
  29. drop_console: true,
  30. },
  31. output: {
  32. ascii_only: true,
  33. },
  34. },
  35. }),
  36. new CssMinimizerPlugin(),
  37. ],
  38. },
  39. stats: 'minimal',
  40. watchOptions: { aggregateTimeout: 200 },
  41. devtool: mode === 'production' ? false : 'inline-source-map',
  42. resolve: {...},
  43. module: {
  44. rules: [...],
  45. },
  46. plugins,
  47. };
  48. };

JS代码:

  1. import { MyDebugModule } from './my-debug-module';
  2. if (DEBUG) {
  3. MyDebugModule();
  4. }

在最终的bundle中没有MyDebugModule()的调用,但是当DEBUGfalse时,webpack会从my-debug-module.js导入代码。如果我完全删除代码if (DEBUG) { MyDebugModule(); } webpack将删除my-debug-module代码。

  1. [email protected]

sideEffects不影响导入的模块。Upd.实际上,在我的情况下是错误的。

iecba09b

iecba09b1#

sideEffects影响到导入的模块-这就是为什么webpack在代码中保留它。它有一个与my-debug-module.js匹配的表达式

相关问题