Вопроса собственно два:
1. Почему если написать так:
module: {
loaders: [{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel',
query: {
presets: ['es2015']
}
}]
}
то вылетает ошибка:
"Module build failed: Error: Couldn't find preset "es2015" relative to directory ...."
А если сделать так:
loaders: [{
test: /\.js$/,
loader: 'babel-loader'
}]
плюс добавить файл .babelrc, в котором указать:
{
"presets": ["es2015"]
}
То все работает?
2. Использую Babel-loader:
module: {
loaders: [{
test: /\.js$/,
loader: 'babel-loader'
}]
}
Если после этого поюзать модуль минификации:
if(NODE_ENV === 'prod') {
module.exports.plugins.push(new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false,
drop_console: true
}
}))
}
То появляется ошибка:
"SyntaxError: Unexpected token: name (Name)..."
Откуда ноги растут понятно, в файле на который указывает ошибка используется Import:
"import Name from '../../../../Name.js';"
Минификация конструкций ES6 Вебпаку не по зубам.
Вот здесь есть "замечательная" рекомендация использовать с Вебпаком ES5.
Получается, сначала каким-нибудь Галпом с Babel компилировать ES6 в ES5, а потом героически собирать это Вебпаком? Не думаю, что такой подход обеспечил бы восхищение коммьюнити. наверняка есть возможность обойтись одним Вебпаком.
UPD
Проблемы оказались взамосвязанными.
Вебпак не преобразует ES6 в ES5. Если же указать loader: 'babel?presets[]=es2015', то появляется ошибка:
Module build failed: Error: Couldn't find preset "es2015" relative to directory
Не может найти модуль, хотя он мирно лежить в node_modules рядом с webpack.config.js