Javascript Webpack 4捆绑包优化、代码拆分-React/Redux应用程序
我正在尝试减小bundle.js的大小。以下是我的生产网页配置: 我的应用程序的结构类似于经典的React/Redux应用程序,如下所示:Javascript Webpack 4捆绑包优化、代码拆分-React/Redux应用程序,javascript,reactjs,optimization,webpack,webpack-4,Javascript,Reactjs,Optimization,Webpack,Webpack 4,我正在尝试减小bundle.js的大小。以下是我的生产网页配置: 我的应用程序的结构类似于经典的React/Redux应用程序,如下所示: |-src |-|-app.js |-|-行动 |-|-组成部分 |-|-助手 |-|-路由器 |-|-选择器 |-|-贮藏 通过这个webpack配置,我成功地提取了css,并将其拆分为最大250kb的块。我还减小了力矩的大小。 经过所有这些努力,我的入口点仍然是583Kb 我还能做什么? 我尝试了延迟加载应用程序的一部分,但没有成功。因此,如果你有
|-src
|-|-app.js
|-|-行动
|-|-组成部分
|-|-助手
|-|-路由器
|-|-选择器
|-|-贮藏
通过这个webpack配置,我成功地提取了css,并将其拆分为最大250kb的块。我还减小了力矩的大小。
经过所有这些努力,我的入口点仍然是583Kb
我还能做什么?
我尝试了延迟加载应用程序的一部分,但没有成功。因此,如果你有React应用程序延迟加载的例子,那就太好了。我有Webpack6.0.1。基于此,我使用以下插件:
//webpack.config.js
module.exports = {
...
devtool: 'cheap-module-source-map',
...
plugins : [
...
new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production') }),
new webpack.optimize.ModuleConcatenationPlugin(),
new webpack.HashedModuleIdsPlugin({
hashFunction: 'sha256',
hashDigest: 'hex',
hashDigestLength: 4
}),
new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.NoEmitOnErrorsPlugin(),
],
...
optimization: {
namedModules: false,
namedChunks: false,
nodeEnv: 'production',
flagIncludedChunks: true,
occurrenceOrder: true,
sideEffects: true,
usedExports: true,
concatenateModules: true,
splitChunks: {
cacheGroups: {
commons: {
test: /[\\/]node_modules[\\/]/,
name: 'vendor',
chunks: 'all'
}
},
minSize: 30000,
maxAsyncRequests: 5,
maxAsyncRequests: 3,
},
noEmitOnErrors: true,
minimize: true,
minimizer: [
// we specify a custom UglifyJsPlugin here to get source maps in production
new UglifyJsPlugin({
cache: true,
parallel: true,
uglifyOptions: {
compress: false,
ecma: 6,
mangle: true
},
sourceMap: true
})
],
removeAvailableModules: true,
removeEmptyChunks: true,
mergeDuplicateChunks: true,
},
...
}
//webpack.config.js
module.exports = {
...
devtool: 'cheap-module-source-map',
...
plugins : [
...
new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production') }),
new webpack.optimize.ModuleConcatenationPlugin(),
new webpack.HashedModuleIdsPlugin({
hashFunction: 'sha256',
hashDigest: 'hex',
hashDigestLength: 4
}),
new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.NoEmitOnErrorsPlugin(),
],
...
optimization: {
namedModules: false,
namedChunks: false,
nodeEnv: 'production',
flagIncludedChunks: true,
occurrenceOrder: true,
sideEffects: true,
usedExports: true,
concatenateModules: true,
splitChunks: {
cacheGroups: {
commons: {
test: /[\\/]node_modules[\\/]/,
name: 'vendor',
chunks: 'all'
}
},
minSize: 30000,
maxAsyncRequests: 5,
maxAsyncRequests: 3,
},
noEmitOnErrors: true,
minimize: true,
minimizer: [
// we specify a custom UglifyJsPlugin here to get source maps in production
new UglifyJsPlugin({
cache: true,
parallel: true,
uglifyOptions: {
compress: false,
ecma: 6,
mangle: true
},
sourceMap: true
})
],
removeAvailableModules: true,
removeEmptyChunks: true,
mergeDuplicateChunks: true,
},
...
}