code-splitting(webpack v4 & react v16.8)

技术在更新,业务在增加,需求也在变化,weback v1 的版本已经不再适合现有的业务,决定对 webpack 做一次升级。

  • webpack v1 -> webpack v3 的升级

webpack v3 一下的版本 code-splitting 基于 CommonsChunkPlugin 和 require.ensure 而实现。弊端就是 css 分离以及 css 修改对 chunkHash 的影响,以及开发环境下热加载的速度有一个质的飞越。

// routes
<Route path="/" getComponent={(state, cb) => {
	require.ensure([], require => {
		cb(null, require('./pages/index').default);
	}, 'index');
}}/>

// webpack.config.js
output: {
	path: path.join(__dirname, '/dist/'),
	publicPath: '/',
	filename: ‘static/js/[name].[chunkhash:8].js’,
	chunkFilename : ‘static/js/[name].[chunkhash:8].js’
},
plugins: [
	new webpack.optimize.CommonsChunkPlugin({
		names: ['vendor'],
		minChunks: Infinity,
		filename: ‘static/js/vendor.[chunkhash].js’,
	}),
	new webpack.optimize.CommonsChunkPlugin({
		names: ['manifest'],
		filename: ‘static/js/manifest.[chunkhash].js‘,
	}),
	new webpack.HashedModuleIdsPlugin()
]
  • webpack v3 -> webpack v4

关于 webpack v4 和 react v16.8 实践 code-splitting。基于 webpack v4 splitChunks 和 react v16.8 React.lazy 进行路由拆分 chunk,实现按需加载 以及
基于 mini-css-extract-plugin 实现 css 分离为单独的文件。

// routes
{
    path: '/',
    exact: true,
    component: React.lazy(() => import(/* webpackChunkName: "home/login" */'./pages/home/login'))
},
// webpack.config.js
splitChunks: {
   chunks: 'all',
   name: false,
     cacheGroups: {
         vendors: {
             test: /[\\/]node_modules[\\/]/,
             name: 'vendors',
             chunks: 'all'
         }
     }
 },

以下是打包之后 webpack-bundle-analyzer 的分析结果:
webpack-bundle-analyzer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值