Оптимизация 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
.