React项目引用antd,优化之项目大小缩减5倍的配置方案,gzip福利

react 项目根目录新建config-overrides.js 并写如下代码,require引入的包可以使用yarn add 安装

const { override, fixBabelImports, addWebpackPlugin } = require('customize-cra');
const AntdDayjsWebpackPlugin = require('antd-dayjs-webpack-plugin');
const { StatsWriterPlugin }  = require("webpack-stats-plugin");
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i; //gzip 压缩正则匹配

// module.exports = function override(config, env) {

// // do stuff with the webpack config...

// return config;

// };

const CompressionWebpackPlugin = require('compression-webpack-plugin'); //这是gzip压缩插件,本地压缩后到线上访问很快

// module.exports = function override(config, env) {
//     // do stuff with the webpack config...
//     return config;
//   };
let startTime = Date.now();
if(process.env.NODE_ENV === 'production') process.env.GENERATE_SOURCEMAP = "false";
// 自定义生产环境配置
const productionConfig =()=> (config) =>{
  if(config.mode === 'production'){
      config.plugins.push(...[
          new StatsWriterPlugin({
              fields: null,
              transform: (data) => {
                let endTime = Date.now()
                data = {
                  Time: (endTime - startTime)/1000 + 's'
                }
                return JSON.stringify(data, null, 2);
              }
          }),
          new BundleAnalyzerPlugin()
      ])
  }
  return config
}

// 打包配置

const compressGzip =()=> config => {

if (config.mode === 'production') {

// 添加js打包gzip配置

config.plugins.push(

new CompressionWebpackPlugin({

algorithm: 'gzip',

test: productionGzipExtensions,

threshold: 0,

minRatio: 0.8,

deleteOriginalAssets: false

}),

)

}

return config;

}

module.exports = override(
  productionConfig,
  fixBabelImports('import', {
    libraryName: 'antd',
    libraryDirectory: 'es',
    style: 'css',
  }),

  compressGzip,

  addWebpackPlugin(new AntdDayjsWebpackPlugin())
);

 2、使用dll文件,这个可以参考我的一篇文章,项目如果引入太大的依赖,使用dll,可以大幅缩减打包速度与项目体积

  https://www.cnblogs.com/uimeigui/p/15841871.html