webpack +反应+ react-router实现懒加载的示例

  介绍

这篇文章主要介绍webpack +反应+ react-router实现懒加载的示例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

在webpack 1中主要是由bundle-loader进行懒加载,而webpack 2中引入了类似于SystemJS的System.import语法,首先我们对于系统。进口的执行流程进行简单阐述:

<李>

Webpack会在编译过程中扫描代码库时将发现的系统。进口调用引入的文件及其相关依赖进行单独打包,注意,Webpack会保证这些独立模块及其依赖不会与主应用的包体相冲突。

<李>

当我们访问到这些独立打包的组件模块时,Webpack会发起JSONP请求来抓取相关的包体。

<李>

系统。进口同样也是承诺,在请求完成之后系统。进口会将抓取到的模块作为参数传入然后中的回调函数。

<李>

如果我们重复访问已经加载完毕的模块,Webpack不会重复执行抓取与解析的过程。

而反应路由器路由的懒加载实际上分为动态路由与与懒加载两步,典型的所谓动态路由配置如下:

/* *   ,* & lt; Route 路径=??组件={核心}比;   ,*,& lt; IndexRoute 组件={回家}/比;   ,*,& lt; Route 路径=癮bout",组件={}/比;   ,*,& lt; Route 路径=皍sers",组件={}用户比;   ,*,& lt; Route 路径=?“,组件={回家}/比;   ,* & lt;/Route>   ,*/export  default  {   ,路径:& # 39;/& # 39;,,   ,组件:核心,   indexRoute:,{大敌;   getComponent才能(位置,cb), {   ,,,…   ,,},   },   ,childRoutes: [   {才能   ,,,路径:& # 39;关于# 39;,,   ,,getComponent(位置,cb), {   ,,,…   ,,},   ,,},   {才能   ,,,路径:& # 39;用户# 39;,,   ,,getComponent(位置,cb), {   ,,,…   ,,},   ,,},   {才能   ,,,路径:& # 39;* & # 39;,,   ,,getComponent(位置,cb), {   ,,,…   ,,},   ,,},   ,),   };

<>强正常打包

import  IndexPage 得到& # 39;。/视图/app.jsx& # 39;   import  AboutPage 得到& # 39;。/视图/about.jsx& # 39;   历史export  default 函数({}),{   return 才能;   ,,,& lt; Router 历史={}历史比;   ,,,,,& lt; Route 路径=??组件={IndexPage},/比;   ,,,,,& lt; Route 路径=?about",组件={AboutPage},/比;   ,,,& lt;/Router>   ,,)   }

这是一个正常打包的路由写法,如果需要分割代码,我们需要改造下路由,借助getComponent和需要。确保

<>强webpack代码分割

export  default 函数({历史}),{   return 才能;   ,,,& lt; Router 历史={}历史比;   ,,,,,& lt; Route 路径=??getComponent={(位置,回调),=祝辞,{   ,,,,,,,require.ensure([],,功能(需要),{   ,,,,,,,,,回调(null,,需要(& # 39;。/HomePage.jsx& # 39;))   ,,,,,,,})   ,,,,,}},/比;   ,,,,,& lt; Route 路径=?about", getComponent={(位置,回调),=祝辞,{   ,,,,,,,require.ensure([],,功能(需要),{   ,,,,,,,,,回调(null,,需要(& # 39;。/AboutPage.jsx& # 39;))   ,,,,,,,})   ,,,,,}},/比;   ,,,& lt;/Router>   ,,)   }

这样看来代码有点累,我们稍微改造下

const  home =,(位置,回调),=祝辞,{   ,require.ensure ([], require =祝辞,{   回调才能(null,,需要(& # 39;。/HomePage.jsx& # 39;))   ,},& # 39;回家# 39;)   }      const  about =,(位置,回调),=祝辞,{   ,require.ensure ([], require =祝辞,{   回调才能(null,,需要(& # 39;。/AboutPage.jsx& # 39;))   ,},& # 39;关于# 39;)   }   历史export  default 函数({}),{   return 才能;   ,,,& lt; Router 历史={}历史比;   ,,,,,& lt; Route 路径=??getComponent={回家}祝辞& lt;/Route>   ,,,,,& lt; Route 路径=?about", getComponent={约}祝辞& lt;/Route>   ,,,& lt;/Router>   ,,)   }

这样看起来是不是简洁了很多

注意:由于webpack的原因,如果直接要求(& # 39;。/AboutPage.jsx& # 39;)不能正常加载,请尝试要求(& # 39;。/AboutPage.jsx& # 39;) .default

<强> webpack2代码分割

上面的代码看起来好像都是webpack1的写法,那么webpack2呢?

webpac2就需要借助系统。导入了

export  default 函数({历史}),{   return 才能;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

webpack +反应+ react-router实现懒加载的示例