如何消除dead webpack requires/imports?

How to eliminate dead webpack requires/imports?

我想使用 Webpack (v2.5.1) 和 UglifyJsPlugin 根据环境 (development/production) 删除某些文件 require/imports。

现状

export const IMAGES = Object.assign(
  {
    PROFILE: require('images/profile.png'),
    // ...
  },
  process.env.NODE_ENV !== 'production' && {'LOGO': require('images/logo.png')}
);

到目前为止,我了解到在生产构建后输出的 Javascript 文件不包含 IMAGES.LOGO 密钥,但输出中存在所需的 images/logo.png 文件。

我有一种预感,即 Webpack 在 Uglify 之前解析文件并在之后保留它们,尽管在消除死代码后它们不再在任何地方使用。

有办法实现吗?

Webpack插件配置

new webpack.DefinePlugin({
  'process.env.NODE_ENV': JSON.stringify('production')
}),
new webpack.optimize.UglifyJsPlugin({
  comments: false,
  sourceMap: true
})

通过发布到 Webpack GitHub repo,了解到死代码消除在这个例子中不起作用。如果我用 if 子句更直接地重写它,它会起作用,如下所示:

export const IMAGES = {
  PROFILE: require('images/profile.png'),
  // ...
};

if (process.env.NODE_ENV !== 'production') {
 IMAGES.LOGO = require('images/logo.png');
}