Nov 13, 2017 React 中文版
When developing React application, you might have found out your app’s size is bigger than your expectation, and the size could reach 3MB even it’s a simple project. To reduce it, there are a variety ways. Thus, this article is about how to reduce React app’s size using Webpack and other useful plugins in few steps.
Webpack already provides us with some plugins to reduce the size of bundle.js, and you can get more detailed information here. In my opinion, using UglifyJsPlugin is the simplest way to reduce bundled JS file size. So, let’s use it and configure Webpack config:
plugins: [
new webpack.optimize.UglifyJsPlugin()
]
There are more optimize plugins you can apply, and above is just a simple example.
Don’t forget to reduce the size of CSS files. I use a plugin called optimize-css-assets-webpack-plugin to handle this. To install it:
npm install --save-dev optimize-css-assets-webpack-plugin
Add it into your Webpack config and apply it:
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin')
...
plugins: [
new webpack.optimize.UglifyJsPlugin(),
new OptimizeCssAssetsPlugin()
]
This step is quite common and important in web application development. Although some web frameworks prvoide similar features, it would be better to compress those assets while building React apps using compression-webpack-plugin. To install the plugin:
npm install --save-dev compression-webpack-plugin
Add it to your Webpack config:
const CompressionPlugin = require('compression-webpack-plugin')
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin')
...
plugins: [
new webpack.optimize.UglifyJsPlugin(),
new OptimizeCssAssetsPlugin(),
new CompressionPlugin({
asset: "[path].gz[query]",
algorithm: "gzip",
test: /\.js$|\.css$|\.html$/,
threshold: 0,
minRatio: 0.8
})
]
After above steps and rebuild, you should find out a significant decrease in your React app’s size. Of course, there are more ways to further improve. I will introduce them in a new post. :)
If you have any suggestions, questions or even find some typos, feel free to contact me. Thank you! :)
zeckli.devforgalaxy@gmail.com © 2015-2019 zeckli, thanks to Jekyll and GitHub.