Как настроить terserplugin, чтобы не искажать имена классов - PullRequest
1 голос
/ 11 июня 2019

Имена классов искалечены во время минификации, но это не должно быть сделано

Я попытался установить зарезервированное свойство при калечении, как описано здесь https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions. К сожалению, это не работает для меня.

У меня есть репозиторий на bitbucket, в котором есть проблема, https://bitbucket.org/JohanBeumer/angular-ivy-aot/src/master/.

Я заметил, что допустил ошибку, не передавая последние источники в bitbucket. Извините за это, я обновил репо.

Конфигурация De Custom Webpack, которую я использую в этом репо, выглядит следующим образом:


module.exports = {
    optimization: {
        minimizer: [
            new TerserPlugin({
                terserOptions: {
                    // https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions
                    compress: false,
                    keep_fnames: true,
                    keep_classnames: true,
                    mangle: {
                        keep_fnames: true,
                        keep_classnames: true,
                        properties: {
                            reserved: ['Foo', 'BaseModel']
                        }
                    }
                }
            })
        ]
    }
};

Я ожидаю, что в заголовке экрана будет отображаться название класса, которое называется «Foo».

Я создаю приложение с помощью команды: ng build --prod --aot

На самом деле у меня возникает вопрос: как я могу запретить webpack minify искажать имя класса?

Спасибо за ответ Тони Нго. Я добавил keep_fnames, как вы предложили, но, к сожалению, это не решает проблему. Теперь я получаю следующую ошибку в консоли:

Console error

1 Ответ

0 голосов
/ 11 июня 2019

Вы можете использовать keep_fnames: true, по умолчанию имя функции будет mangle, поэтому keep_fnames означает сохранение имени функции

module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        terserOptions: {
          ecma: undefined,
          warnings: false,
          parse: {},
          compress: {},
          mangle: true,
          module: false,
          output: null,
          toplevel: false,
          nameCache: null,
          ie8: false,
          keep_classnames: undefined,
          keep_fnames: true, // change to true here
          safari10: false,
        },
      }),
    ],
  },
};
...