Vue中使用import进行路由懒加载的原理分析


Posted in Vue.js onApril 01, 2022

使用import进行路由懒加载的原理

首先我们来说说,import 和 require 的区别

node 编程中最重要的思想就是模块化,import 和 require 都是被模块化所使用。

(1)遵循规范

  • require是 AMD规范引入方式
  • import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法

(2)调用时间

  • require是运行时调用,所以require理论上可以运用在代码的任何地方
  • import是编译时调用,所以必须放在文件开头

(3)本质

  • require是赋值过程,其实require的结果就是对象、数字、字符串、函数等,再把require的结果赋值给某个变量
  • import是解构过程,但是目前所有的引擎都还没有实现import,我们在node中使用babel支持ES6,也仅仅是将ES6转码为ES5再执行,import语法会被转码为require

在路由中,我们如何使用懒加载呢?

export default new VueRouter({
    routes: [
        {
            path: '/',
            component: () => import('../components/Navigator')
        }
    ]
})

使用路由懒加载的写法,只会在进入当前这个路由时候才会走 component ,然后在运行import编译加载相应的组件。

可以理解也是为通过Promise的resolve机制。因为Promise函数返回的Promise为resolve组件本身,而我们又可以使用import来导入组件。

注意:import会返回一个Promise对象。

setTimeout(() => {
    import('./dynamic-data.js').then(res => {
        console.log(res.default.message)
    })
}, 1500)
// dynamic-data.js
export default {
    message: 'this is message'
}

vue路由懒加载,使用import无法处理

问题原因:import属于异步引用组件,需要特殊的babel-loader处理

解决

npm i babel-plugin-syntax-dynamic-import -D

在 .bablerc中引入syntax-dynamic-import插件

{
    "presets": ["env"],
    "plugins": ["syntax-dynamic-import"]
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。 

Vue.js 相关文章推荐
Vue实现省市区三级联动
Dec 27 Vue.js
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 Vue.js
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
vue实现禁止浏览器记住密码功能的示例代码
Feb 03 Vue.js
Vue实现todo应用的示例
Feb 20 Vue.js
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 Vue.js
浅谈vue2的$refs在vue3组合式API中的替代方法
Apr 18 Vue.js
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
vue+spring boot实现校验码功能
May 27 Vue.js
在vue中import()语法不能传入变量的问题及解决
Apr 01 Vue.js
vue整合百度地图显示指定地点信息
Apr 06 Vue.js
vue ant design 封装弹窗表单的使用
Jun 01 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 #Vue.js
vue ref如何获取子组件属性值
Mar 31 #Vue.js
vue如何使用模拟的json数据查看效果
vue+iview实现手机号分段输入框
Mar 25 #Vue.js
Vue3中toRef与toRefs的区别
Mar 24 #Vue.js
一起来看看Vue的核心原理剖析
Mar 24 #Vue.js
深入讲解Vue中父子组件通信与事件触发
Mar 22 #Vue.js
You might like
SONY SRF-M100的电路分析
2021/03/02 无线电
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
php微信开发之关注事件
2018/06/14 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
用js实现手把手教你月入万刀(转贴)
2007/11/07 Javascript
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
基于JQuery的cookie插件
2010/04/07 Javascript
js 函数调用模式小结
2011/12/26 Javascript
javascript运行机制之this详细介绍
2014/02/07 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
2015/12/24 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
关于vue-router的那些事儿
2018/05/23 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
前端 javascript 实现文件下载的示例
2020/11/24 Javascript
[42:25]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第三场
2018/04/06 DOTA
在Python 的线程中运行协程的方法
2020/02/24 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
ECHT官方网站:男女健身服
2020/02/14 全球购物
旷课检讨书大全
2014/01/21 职场文书
初一科学教学反思
2014/01/27 职场文书
解除劳动合同协议书
2014/04/14 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
大学生安全责任书
2014/07/25 职场文书
幼儿教师师德师风演讲稿
2014/08/22 职场文书
庆元旦演讲稿
2014/09/15 职场文书
学生意外伤害赔偿协议书
2014/09/17 职场文书
2014年财政所工作总结
2014/11/22 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
物业保洁员岗位职责
2015/02/13 职场文书
统计员岗位职责范本
2015/04/14 职场文书
幼儿园小班教学反思
2016/03/03 职场文书
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB