Как уберечь библиотеку от проблем с UglifyJs или Terser Webpack Plugin? - PullRequest
0 голосов
/ 11 декабря 2018

Работа с моим кодом с помощью terser-webpack-plugin работает только до тех пор, пока я не установлю для mangle.properties значение true.Мне тоже нужно изменить свойства, но если я включу его, возникнут всевозможные проблемы, связанные с используемыми библиотеками.Поэтому я бы хотел, чтобы lib-sources (внутри node_modules) не попадала в поток минимизации / искажения.

Я использую babel для переноса всего в es5 из es6 и выше.Я использую webpack 4, кстати.

Похоже, проблема, с которой я сталкиваюсь, заключается в том, что все минимизации в webpack работают только на окончательный выходной JavaScript, а не исходные файлы.

Я пытался положитьИмена классов библиотек внутри зарезервированного массива внутри опций mangle, но пока это не помогло.Я также пытался работать наоборот;используйте регулярное выражение для terserplugin, чтобы использовать плагин только для самого важного объекта, чтобы минимизировать и искажать, но это не работает, как ожидалось, возможно, из-за перемещения бабеллы.И не то, что я после.Я хочу минимизировать / mangle по крайней мере весь мой код и предпочитаю, чтобы libs тоже минимизировал, но без mangle.

Я использовал uglifyjs-webpack-plugin и uglifyjs-3-webpack-plugin,но переключился на terser-webpack-plugin сейчас, потому что это кажется более перспективным и имеет большую поддержку.Поэтому было бы предпочтительно, если кто-нибудь знает решение для этого на terser-webpack-plugin (который имеет практически тот же config / api, что и uglifgyjs).Но я открыт для ответов и для других плагинов и могу переключиться обратно, если это сработает.

Я пытаюсь заставить это работать несколько дней и копался во всех (!) Настройкахterserplugin, чтобы найти то, что мне нужно, но не смог найти его.Надеюсь, кто-нибудь здесь сможет мне помочь.Спасибо!

1 Ответ

0 голосов
/ 24 февраля 2019

Я думал, что не знаю, как это сделать, но я выяснил.

Согласно документации к terser-webpack-plugin, вы можете использовать test для выбора файлов для минимизации, напримерэто:

module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        test: /\.js(\?.*)?$/i,
      }),
    ],
  },
};

Таким образом, вы хотите добавить 2 new TerserPlugin(...), один с тестом для файлов, которые вы хотите манипулировать свойствами (и свойства mangle включены в опциях), а другой для файлов, где вы хотитене хочу искажать свойства (и свойства искажены отключены).

...