Я новичок в webpack. Не могу понять, почему он компилирует такой тяжелый bundle.js. Даже для самого маленького из ваших примеров todos-with-undo это 1,9 МБ! Для других более сложных примеров это около 2,5 МБ. В конфигурации определенно что-то не так.
Кстати, отличная работа :)
В этом нет ничего плохого, примеры просто не настроены для продакшена. Мы вряд ли сделаем это здесь, чтобы избежать бремени обслуживания - обратитесь к более полным шаблонам Webpack для примеров производственных конфигураций.
По крайней мере, вы захотите сделать это в продакшене:
devtool
с 'eval'
на 'source-map'
webpack.DefinePlugin
чтобы установить process.env.NODE_ENV
в 'production'
webpack.optimize.UglifyJsPlugin
для минификацииNODE_ENV=production
поэтому .babelrc
не включает react-transform
Типичная производственная конфигурация Webpack может выглядеть так:
var path = require('path');
var webpack = require('webpack');
module.exports = {
devtool: 'source-map',
entry: [
'./src/index'
],
output: {
path: path.join(__dirname, 'dist'),
filename: 'bundle.js',
publicPath: '/static/'
},
plugins: [
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.DefinePlugin({
'process.env': {
'NODE_ENV': JSON.stringify('production')
}
}),
new webpack.optimize.UglifyJsPlugin({
compressor: {
warnings: false
}
})
],
module: {
loaders: [{
test: /\.js$/,
loaders: ['babel'],
include: path.join(__dirname, 'src')
}]
}
};
Вот шаблон, включающий производственный режим, если вам интересно.
Лучшим способом должен быть AsyncRoute. Мы должны связать шаблон / css / js компонента вместе, чтобы избежать множественных запросов, но загружать его по запросу.
Использование devtool
качестве inline-source-map
вместо простого source-map
также приведет к увеличению объема выходного файла, поместив исходную карту (сюрприз) в строку. Очевидно, но я пропустил это, и мне потребовался час, чтобы понять, поэтому я помещаю это здесь для общего использования в будущем.
Самый полезный комментарий
В этом нет ничего плохого, примеры просто не настроены для продакшена. Мы вряд ли сделаем это здесь, чтобы избежать бремени обслуживания - обратитесь к более полным шаблонам Webpack для примеров производственных конфигураций.
По крайней мере, вы захотите сделать это в продакшене:
devtool
с'eval'
на'source-map'
webpack.DefinePlugin
чтобы установитьprocess.env.NODE_ENV
в'production'
webpack.optimize.UglifyJsPlugin
для минификацииNODE_ENV=production
поэтому.babelrc
не включаетreact-transform
Типичная производственная конфигурация Webpack может выглядеть так:
Вот шаблон, включающий производственный режим, если вам интересно.