Webpack 用小项目创建大文件 [英] Webpack creating large file with small project
问题描述
我的 webpack 生成了一个大型 main.js 文件 (1.7mb),其中包含一个包含约 20-30 个文件的小项目,每个文件少于 100 行.所需的依赖项很少(React、Fluxible),我正在使用我能理解的每个优化插件:
I got my webpack generating a large main.js file (1.7mb) with a small project of ~20-30 files less than 100 lines each. The dependencies required are few in number (React, Fluxible) and I am using every optimize plugin I can understand:
module.exports = {
output: {
path: './build',
publicPath: '/public/',
filename: '[name].js'
},
debug: false,
devtool: 'eval',
target: 'web',
entry: [
'bootstrap-sass!./bootstrap-sass.config.js',
'./client.js',
],
stats: {
colors: true,
reasons: false
},
resolve: {
extensions: ['', '.js'],
alias: {
'styles': __dirname + '/src/styles',
'components': __dirname + '/src/scripts/components',
'actions': __dirname + '/src/scripts/actions',
'stores': __dirname + '/src/scripts/stores',
'constants': __dirname + '/src/scripts/constants',
'mixins': __dirname + '/src/scripts/mixins',
'configs': __dirname + '/src/scripts/configs',
'utils': __dirname + '/src/scripts/utils'
}
},
module: {
loaders: [
{ test: /\.css$/, loader: 'style!css' },
{ test: /\.js$/, exclude: /node_modules/, loader: require.resolve('babel-loader') },
{ test: /\.json$/, loader: 'json-loader'},
{ test: /\.(png|svg|jpg)$/, loader: 'url-loader?limit=8192' },
{ test: /\.(ttf|eot|svg|woff|woff(2))(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: "url?name=/[name].[ext]"},
{ test: /\.scss$/,
loader: ExtractTextPlugin.extract('style-loader',
'css!sass?outputStyle=expanded&' +
"includePaths[]=" +
(path.resolve(__dirname, "./node_modules"))
)
}
]
},
plugins: [
new webpack.NoErrorsPlugin(),
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
"windows.jQuery": "jquery"
}),
new ExtractTextPlugin("[name].css", {allChunks: true}),
new webpack.optimize.DedupePlugin(),
new webpack.optimize.UglifyJsPlugin(),
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.optimize.AggressiveMergingPlugin()
],
};
我做错了什么或者我在哪里可以进一步改善文件的大小?
What am I doing wrong or where can I further improve the size of the file?
推荐答案
我使用 uglifyjs 和默认的 uglifyjs 在这里做这些事情(devtools: 'source-map'),我的反应从 2.1mb 减少到 160kb gzipped设置(没有 gzip,它最终约为 670kb).
I got my react down from 2.1mb down to 160kb gzipped just by doing the things here (devtools: 'source-map'), using uglifyjs with the default settings (without gzip it ends up being about 670kb).
它可能没有那么很棒,但至少它不再疯狂了.
It's probably not that great, but at least it's not crazy anymore.
为了后代,这是我的 webpack 配置:
For posterity, here is my webpack config:
// webpack.config.js
var webpack = require('webpack');
module.exports = {
devtool: 'source-map',
entry: [
'webpack-dev-server/client?http://127.0.0.1:2992',
'webpack/hot/only-dev-server',
'./js/main'
],
output: {
path: './out/',
filename: 'main.js',
chunkFilename: '[name]-[chunkhash].js',
publicPath: 'http://127.0.0.1:2992/out/'
},
module: {
loaders: [
{
test: /\.jsx?$/,
exclude: /(node_modules|bower_components)/,
loaders: ['react-hot', 'babel?optional=runtime&stage=0&plugins=typecheck']
}
]
},
progress: true,
resolve: {
modulesDirectories: [
'js',
'node_modules'
],
extensions: ['', '.json', '.js']
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin(),
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
new webpack.DefinePlugin({
'process.env': {
// This has effect on the react lib size
'NODE_ENV': JSON.stringify('production'),
}
}),
new webpack.optimize.UglifyJsPlugin()
]
};
这篇关于Webpack 用小项目创建大文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!