Оптимизация Webpack с помощью плагина UglifyJS вызывает ошибку времени выполнения

у меня есть изоморфное приложение React, которое поставляется через webpack.

у меня есть 2 точки входа, соответствующие 2 выходам файлов в комплекте:vendors.js и app.js.

при выполнении webpack-dev-сервер или при компиляции без каких-либо флагов оптимизации все работает нормально. Однако, как только я попытаюсь использовать уродовать плагин, скомпилированный вывод содержит ошибки.

Я попробовал:

webpack -p
webpack -optimize-minimize

или в конфиге:

new webpack.optimize.UglifyJsPlugin({sourceMap:false})

но все они приводят к одной и той же ошибке выполнения (неопределенные переменные).

есть ли что-нибудь очевидное, что может быть причиной этого? Является ли Uglify чрезмерным усердием и удалением чего-то, чего он не должен?

3 ответов


проблема была вызвана уродовать давилка. Не зная, какая переменная rename вызывает проблему, решением было полностью отключить mangling:

new webpack.optimize.UglifyJsPlugin({
  sourceMap: false,
  mangle: false
})

Это должно быть добавлено в качестве Плагин Webpack в конфигурационный файл, например:

var config = {

  //... various config settings

  plugins: [
    new webpack.optimize.UglifyJsPlugin({
      sourceMap: false,
      mangle: false
    })
  ]
};

для тех, кто деактивировал mangle и все еще имеет проблему, проверьте, если вы строите с параметром-p. Оказывается-p также калечит выход, и в моем случае мне пришлось переключить uflifyjsplugin mangle на false и построить без флага-p, чтобы заставить его работать (за счет увеличения веса js около 50%)


я исправил это, используя следующее (Я использую Webpack 4.5):

var config = {
  optimization: {
    minimizer: [
      new UglifyJsPlugin({
        uglifyOptions: {
          safari10: true,
          mangle: {
            safari10: true,
          }
        }
      })
    ]
  }
};

от https://github.com/mishoo/UglifyJS2/tree/harmony#mangle-options:

safari10 (по умолчанию false) -- Pass true для работы с ошибкой итератора цикла Safari 10 "не удается объявить переменную let дважды". См. также: параметр вывода safari10.

Также обратите внимание, что это идет в optimization.minimizer. Это не сработало для меня, когда я положил его в plugins.