Webpack + react-router 按需加载
2017-07-13 11:42
721 查看
webpack + react-router 按需加载
关键函数
require.ensure(dependencies, callback, chunkName)
详情请见官方文档
webpack 配置
name 表示创建的chunk的指定名字,如果未指定则用id作为name
chunkhash 是文件的 hash 码,用来保证文件的唯一性,这里使用前五位(前几位可随意选取)
结合react-router
中文文档在这里!
其中提供了三个函数分别是:
getChildRoutes
getIndexRoute
getComponents
他们的作用都是访问到当前路由时才会去加载脚本,由此按需加载便得以实现。
官方的例子中使用的是以对象的形式构建路由,在此,我觉得用jsx更加直观。
所以我们需要将原本Route组件的component属性换成getComponent以此来运行我们的关键函数。
示例代码
这样按需就在就完成了,但是我们可以用更优雅的方式来写。
将对应组件的加载函数进行封装,这样更加直观易懂。
注意点
1、require(‘components/Index’).default中require方法的参数不能使用变量,只能使用字符串!
2、如果你的组件是使用es5的module.exports导出的话,那么只需要require(‘components/Index’)即可。而如果你的组件是使用es6的export
default导出的话,那么需要加上default!例如:require(‘components/Index’).default
3、如果在路由页面使用了按需加载(require.ensure)加载路由级组件的方式,那么在其他地方(包括本页面)就不要再import了,否则不会打包生成chunk文件。简而言之,需要按需加载的路由级组件必须在路由页面进行加载。
未使用redux:react-hot
使用redux:react-redux-github
使用redux:react-redux-github
参考
1、react-router 按需加载
2、webpack 按需打包加载
关键函数
require.ensure(dependencies, callback, chunkName)
详情请见官方文档
webpack 配置
output: { path: path.join(__dirname, '../dist'), filename: '[name].js', sourceMapFilename: '[file].map', publicPath: '/static/', //加这个! chunkFilename: '[name].[chunkhash:5].chunk.js', },
name 表示创建的chunk的指定名字,如果未指定则用id作为name
chunkhash 是文件的 hash 码,用来保证文件的唯一性,这里使用前五位(前几位可随意选取)
结合react-router
中文文档在这里!
其中提供了三个函数分别是:
getChildRoutes
getIndexRoute
getComponents
他们的作用都是访问到当前路由时才会去加载脚本,由此按需加载便得以实现。
官方的例子中使用的是以对象的形式构建路由,在此,我觉得用jsx更加直观。
所以我们需要将原本Route组件的component属性换成getComponent以此来运行我们的关键函数。
示例代码
import React from 'react'; import { Route, IndexRedirect, } from 'react-router'; import rootNode from './rootNode'; const routes = ( <div> <Route path='/' component={rootNode}> <IndexRedirect to='index' /> <Route path='index' getComponent={(location, cb) => { require.ensure([], require => { cb(null, require('components/Index').default); }, 'index'); }} /> </Route> </div> ); export default routes;
这样按需就在就完成了,但是我们可以用更优雅的方式来写。
import React from 'react'; import { Route, IndexRedirect, } from 'react-router'; import rootNode from './rootNode'; const index = (location, cb) => { require.ensure([], require => { cb(null, require('components/Index').default); }, 'index'); }; const routes = ( <Route path='/' component={rootNode}> <IndexRedirect to='index' /> <Route path='index' getComponent={index} /> </Route> ); export default routes;
将对应组件的加载函数进行封装,这样更加直观易懂。
注意点
1、require(‘components/Index’).default中require方法的参数不能使用变量,只能使用字符串!
2、如果你的组件是使用es5的module.exports导出的话,那么只需要require(‘components/Index’)即可。而如果你的组件是使用es6的export
default导出的话,那么需要加上default!例如:require(‘components/Index’).default
3、如果在路由页面使用了按需加载(require.ensure)加载路由级组件的方式,那么在其他地方(包括本页面)就不要再import了,否则不会打包生成chunk文件。简而言之,需要按需加载的路由级组件必须在路由页面进行加载。
未使用redux:react-hot
使用redux:react-redux-github
使用redux:react-redux-github
参考
1、react-router 按需加载
2、webpack 按需打包加载
相关文章推荐
- webpack+react-router实现代码拆分按需加载(上)
- 基于 Webpack 2 的 React Router 懒加载路由配置
- webpack+react-router实现代码拆分按需加载(下)
- webpack+react-router按需加载入门
- React router+ webpack实现JS按需加载
- React-router中结合webpack实现按需加载实例
- react-router4 配合webpack require.ensure 实现异步加载的示例
- React-router中,结合webpack实现按需加载
- 利用 React/Redux/React-Router 4/webpack 开发大型 web 项目时如何按需加载
- 详解webpack + react + react-router 如何实现懒加载
- Webpack懒加载React Router的页面组件
- [置顶] React-router-v4 - Webpack 实现按需加载(code-splitting)
- 基于react16 webpack3 搭建前端spa基础框架 react-router的4种异步加载方式
- 基于react16 webpack3 搭建前端spa基础框架 react-router的4种异步加载方式
- linux+nginx+express+mongoose+webpack+react+react-router+sass构建web应用
- webpack-3 react-router-4 react-15.6 升级记录
- 使用NPM配置React环境及Webpack热加载
- Webpack2 + Vue2 + Vue-Router2 如何实现懒加载?
- EasyDSS高性能流媒体服务器前端重构(五)- webpack + vue-router 开发单页面前端实现按需加载 - 副本
- 关于在reactjs项目中如何用webpack配置组件按需加载