构建环境
node 6.10.3, webpack 3.6.0, react 15.6.1, react-router 2.8.1
兼容IE9及以上主流浏览器,各类双核浏览器极速模式。
写在前面
每个人都掌握形形色色的前端框架,无论技术流行与否,各自都用的非常舒爽。但是时间长了,会发现有很多小问题即不影响大局,却又如鲠在喉。作为一个前端技术人员,实在无法忍受,于是重构的想法应运而生。
重构又带来很多业务代码不兼容等问题,所以本文所写一篇webpack1.x升级至3.x的经历。
项目介绍
公司之前的项目是基于webpack 1.8.5, react15.3.2, react-router2.8.1动态路由的react框架。是我认识唯一一个从事前端超过十年的大牛构建于16年初的项目,也是我前端初窥门径的奠基石。
因为包管理的紊乱,webpack配置管理紊乱,构建年代久远无法兼容一些新的功能等关系。终于忍痛对其进行了静默升级。
webpack配置
1 | let ExtractTextPlugin = require('extract-text-webpack-plugin') //样式分离插件 |
说明:没有贴loader全部loader,只贴了一个scss分离样式的loader,根据自己的需要配置相应的loader。
dev-options配置:
1 | var util = require('./webpack.util') //工具包 |
util工具包:
1 | var os = require('os') |
webpack.plugins.config配置:
1 | let webpack = require('webpack') |
react react-router配置
webpack打包入口即reactapp入口代码如下
1 | import React from 'react' |
react组件基础容器代码如下
1 | import React from 'react' |
根据实际需要来做基础容器(可以写一些通用的方法)。也可以是一个空容器,即用来加载子路由组件即可。
react-router子路由配置
1 | module.exports = { |
webpack会根据require.ensure来进行代码分割,把请求到的代码划分为一个chunk文件。这里webpack1.x和2.x与3.x是有区别的。webpack1.x和2.x不需要添加
cb(null, require(‘./Login.jsx’).default)
.default
而3.x必须添加.default如不添加则会找不到组件且不报错。这个坑处理了很久。