webpack使用require.ensure将vue页面打包成独立的chunk文件,也可以将多个vue页面合并成一个chunk文件,以实现生产环境按需加载。
下面给出官网的require.ensure函数原型:

require.ensure(dependencies: String[],callback: function(require),errorCallback: function(error),chunkName: String
)

各个参数含义如下:
1、dependencies:依赖
这是一个字符串数组,通过这个参数,在所有的回调函数代码被执行前,我们可以将所有需要用到的模块进行声明。
2、callback:回调
当所有的依赖都加载完成后,webpack会执行这个回调函数。require 对象的一个实现会作为一个参数传递给这个回调函数。因此,我们可以进一步 require() 依赖和其它模块提供下一步的执行。
3、errorCallback:错误回调
4、chunkName:chunk名称
chunkName 是提供给这个特定的 require.ensure() 的 chunk 的名称。通过提供 require.ensure() 不同执行点相同的名称,我们可以保证所有的依赖都会一起放进相同的文件束(bundle)。

概念说完了,接下以来以vue文件为例论证

在src/pages目录下新建confirm.vue和example.vue
然后在路由文件router/index.js中引入

const confirm = r => require.ensure([], () => r(require('../pages/confirm.vue')), 'group-confirm');
const example = r => require.ensure([], () => r(require('../pages/example.vue')), 'group-example');

如果要在打包文件中显示chunkName,则需要修改webpack.prod.conf文件的chunkFilename,并且要设置 webpack.base.conf.js文件中的publicPath,单独打包出来的chunk是以publicPath为存储路径的,一般生产环境我们都会存放在cdn上,这时可以给出cdn完整的路径。

output: {path: config.build.assetsRoot,filename: utils.assetsPath('js/[name].[chunkhash].js'),- chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')+ chunkFilename: utils.assetsPath('js/[name].[chunkhash].js')
},

打包生成的文件如下图所示:

require.ensure是webpack所独有的,可以被es6的import取代:

const confirm = () => import(/* webpackChunkName: "group-confirm" */ '../pages/confirm');
const example = () => import(/* webpackChunkName: "group-example" */ '../pages/example');

此时或许大家会有一个小小的疑问,require.ensure只能用在生产环境吗?webpack是怎么区分生产和测试环境呢?

答案就是配置文件webpack.prod.conf.js中配置的chunkFilename,它与路由中的 require.ensure相互应,实现js文件分割。如果在webpack.dev.conf.js中也进行相同的配置,则开发环境中也会生成相应的chunk文件。

require.ensure实现webpack按需加载相关推荐

  1. Webpack按需加载秒开应用

    作者 DBCdouble 一.前言 本文将基于上一篇文章<Webpack4+Babel7优化70%速度>所搭建的环境去做动态路由加载,同时完成 React16 和 React-Router ...

  2. ensure函数_webpack中利用require.ensure()实现按需加载

    webpack中的require.ensure()可以实现按需加载资源包括js,css等,它会给里面require的文件单独打包,不和主文件打包在一起,webpack会自动配置名字,如0.js,1.j ...

  3. ensure函数_webpack中require.ensure()实现按需加载

    webpack中的require.ensure()可以实现按需加载资源包括js,css等,它会给里面require的文件单独打包,不和主文件打包在一起,webpack会自动配置名字,如0.js,1.j ...

  4. webpack中实现按需加载

    当页面中一个文件过大并且还不一定用到的时候,我们希望在使用到的时候才开始加载这个文件俗称按需加载.这样可以减少页面的响应时间,提高访问速度. 使用webpack打包的出来的文件要实现以上的要求有两种方 ...

  5. vue按需加载组件-webpack require.ensure(转)

    vue按需加载组件-webpack require.ensure 2017年07月28日 09:58:07 A_山水子农 阅读数:23245 标签: vue按需加载组件按需加载webpackrequi ...

  6. webpack中利用【require.ensure()】和【import()】实现按需加载

    1.require.ensure()themes为变量,设计多个文件名根据themes动态变化可以映入不同less文件如下require.ensure([], function (require) { ...

  7. webpack和vue的按需加载组件、console、抓包

    1.webpack和vue的按需加载组件 webpack特有的懒加载文件的方式,很大的提升了webpack打包SPA应用的在性能方面. 而从webpack2以后require.ensure已经被imp ...

  8. Webpack实战(九):实现资源按需加载-资源异步加载

    第八篇[<教你搞懂webpack如果实现代码分片(code splitting)>] (https://blog.csdn.net/lfcss/article/details/104099 ...

  9. Webpack的Code Splitting实现按需加载

    一. 什么是Code Splitting? 在最开始使用Webpack的时候, 都是将所有的js文件全部打包到一个build.js文件中(文件名取决与在webpack.config.js文件中outp ...

最新文章

  1. 计算机英语课程 ppt,Unit 3_计算机专业英语_doc_大学课件预览_高等教育资讯网
  2. mysql 查询优化 ~ explain与索引失效
  3. 分布式事务中的2PC
  4. c语言 常量字符串数组,C语言常量以及字符串数组
  5. Leaflet文档阅读笔记-Leaflet on Mobile笔记
  6. python如何获取文件的行号_Python当我捕获异常时,如何获取类型,文件和行号?...
  7. Firefox 密码管理器 Lockbox 推出 Android 版
  8. 台前与幕后的 5G 战争
  9. Google七项不得不知的搜索技巧
  10. 从官网获取redhat
  11. ORACLE数据库数据迁移
  12. 数据恢复原来是可以免费的!
  13. 最新国民人均年薪出炉,你有没有拉国家的后腿?
  14. 第94页的gtk+编程例子——正文构件
  15. peer之间的通信协议
  16. SolidWorks Premium 白金版
  17. 学生结构体,学生有姓名 学号 三门成绩 班级人数为五人 。实现 1:第一门成绩的平均分;2:找出两门以上不及格的学生,输出他们的姓名学号及三门成绩; 3:找出平均分在90分以上或者全部成绩在85分以上
  18. JUC源码分析16-集合-ConcurrentSkipListMap、ConcurrentSkipListSet
  19. 【总结】浏览器 User-Agent 大全
  20. opencv生成棋盘格

热门文章

  1. 读书百客:《江南》赏析
  2. Android maven多flavor上传
  3. Android插件化最佳方案--Phantom 实践指南
  4. 无人能及的动作明星--李小龙
  5. 以Arduino编写伺服插补控制及C#上位机的阿基米德螺旋线检测
  6. 影刀RPA——重新定义我们的工作方式
  7. os php7 icu4c,icu4c 版本问题 dyld: Library not loaded
  8. 风格迁移GitHub顶级代码
  9. eventhandler java_用 EventHandler 进行事件监听
  10. java eventhandler 触发_事件委托 EventHandler