Буквально сегодня столкнулся с этой ошибкой в своём личном Vue.js проекте. Начал я его с помощью vue-cli который ещё в декабре 2018 года генерировал не слишком актуальный, мягко говоря, шаблон для приложения. Как сейчас дела обстоят я не знаю. Надеюсь, что лучше.
ERROR in source-default~app~06837ae4.8b4156b67e5cea799303.js from UglifyJs
Unexpected token: punc «(» [source-default~app~06837ae4.8b4156b67e5cea799303.js:149,6]
Причина
Эта ошибка возникает если вы пытаетесь сжать с помощью UglifyJS ES6 код. Вкратце подоплёка такова: uglifyjs-webpack-plugin вернулся к использованию uglify-js вместо uglify-es с версии 2.0.0 (см. changelog) так как последний был заброшен.
Решение
Использовать terser-webpack-plugin. Под капотом он использует Terser который в своей сути является форком uglify-es. На момент написания этого предложения последний коммит в Terser был 21 минуту назад, поэтому им можно смело пользоваться. Terser старается сохранить совместимость API и CLI с uglify-es и uglify-js@3
Пример конфига Webpack
Чтобы включить terser-webpack-plugin в ваш сборочный процесс необходимо в конфиг вебпака в опции optimization добавить следующий код:
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
cache: true,
parallel: true,
terserOptions: {
ecma: 10, // обратите внимание, что это последняя версия стандарта!
compress: true,
output: {
comments: false,
beautify: false
}
}
})
]
}
Собственно, тоже самое написано в документации к Вебпаку, но кто её читает, верно?