Всем привет, только что решил собрать продакшн, выполнил команду npm run build... и получил ошибку:
ERROR in js/app.js from UglifyJs
Invalid assignment [js/app.js:26191,31]
Я полез в app.js на 26191 строку и вижу там:
const renderNode = (node, key) => {
if (node.nodeName === '#text') {
return node.value;
}
То есть тут ES6 стрелочная функция, но ведь в конфиге webpack указано, что необходимо с помощью babel трансформировать в ES5:
{
test: /\.js$/,
exclude: /node_modules/,
use: ['babel-loader', 'eslint-loader']
}
Дальше начал искать, откуда этот код попал в сборку app.js, и оказалось что он с node_modules (т.е пакет написан на ES6)
Хорошо подумал я, может дело в том, что я запретил обрабатывать (exclude) папку node_modules?
Но если я удалю строку (exclude: /node_modules/), то возникнет еще одна ошика, вернее очень много ошибок, так как ESLint (Standard Styly), мало пакетов в соответствии с выбранным стилем написаны
Далее я добавил новый reles:
{
test: /\.js/,
include: /node_modules/,
use: ['babel-loader']
}
Работает, но меня не покидает мысль, а разве правильно это? обрабатывать все пакеты из node_modules babel'ом? время сборки сильно увеличилось...
Как вы решаете такие проблемы, в частности, когда в продакшн сборку попадают стрелочные функции, да и не только они, а вообще ES6, не говоря уже о ES7 фичах?
Вот ссылка на
конфиг webpack