当前位置: 首页 > news >正文

vue按需加载组件_require.ensure实现webpack按需加载

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')
},

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

06891170c0b3924af48cd82c0eb0a78c.png

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文件。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • networkx 标签_NetworkX:是一个简单、多样化、能快速生成网络图形的Python库
  • 华为三层交换机配置步骤_华为交换机Trunk配置
  • python 遍历所有文件夹和子文件夹_Python 遍历子文件和所有子文件夹的代码实例...
  • redis模糊查询key前缀_Redis内存数据监控实战
  • completablefuture 线程池_线程池ForkJoinPool简介
  • 判断多个数据是否是两个素数相乘_循环结构程序举例2素数的判断
  • chrome 验证码识别 扩展_chrome插件市场国内无法打开,我来教你如何安装插件
  • python深度神经网络_PyTorch进阶:深度神经网络中的前馈过程(图解分析)
  • python判断能否组成三角形_如何用PYTHON判断三角形的类型 需要技巧
  • 查看python安装成功的命令_Python sqlite3模块 安装查询命令等使用讲解
  • python输入半径计算公式_python练习:取输入半径的周长和面积
  • python重命名文件或目录_命令和Python重命名文件
  • python 列表_Python 算法 09 -- 散列表
  • python粘性拓展_拓展Python Markdown
  • ping不通服务器_服务器远程桌面不上不要急,这就告诉你原因
  • [nginx文档翻译系列] 控制nginx
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Apache Pulsar 2.1 重磅发布
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • DataBase in Android
  • Debian下无root权限使用Python访问Oracle
  • Invalidate和postInvalidate的区别
  • IOS评论框不贴底(ios12新bug)
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Python_网络编程
  • Spring-boot 启动时碰到的错误
  • TypeScript迭代器
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 近期前端发展计划
  • 聊聊sentinel的DegradeSlot
  • 马上搞懂 GeoJSON
  • 排序算法之--选择排序
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 一天一个设计模式之JS实现——适配器模式
  • Python 之网络式编程
  • #vue3 实现前端下载excel文件模板功能
  • $ git push -u origin master 推送到远程库出错
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (分布式缓存)Redis分片集群
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (论文阅读40-45)图像描述1
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (十八)Flink CEP 详解
  • (四) Graphivz 颜色选择
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (译)计算距离、方位和更多经纬度之间的点
  • ***利用Ms05002溢出找“肉鸡
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .Net MVC4 上传大文件,并保存表单
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • @JsonFormat 和 @DateTimeFormat 的区别
  • [ C++ ] 类和对象( 下 )