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中音频wavesurfer.js的使用方法
Feb 20 Vue.js
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 Vue.js
VUE项目实现主题切换的多种方法
Nov 26 Vue.js
Vue中强制组件重新渲染的正确方法
Jan 03 Vue.js
vue backtop组件的实现完整代码
Apr 07 Vue.js
vue组件的路由高亮问题解决方法
May 11 Vue.js
HTML+VUE分页实现炫酷物联网大屏功能
May 27 Vue.js
Vue vee-validate插件的简单使用
Jun 22 Vue.js
使用vue判断当前环境是安卓还是IOS
Apr 12 Vue.js
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
vue组件vue-esign实现电子签名
Apr 21 Vue.js
Vue router配置与使用分析讲解
Dec 24 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
PHP中如何判断AJAX提交的数据
2012/02/05 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
PHP获取路径和目录的方法总结【必看篇】
2017/03/04 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
javascript中数组中求最大值示例代码
2013/12/18 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
jQuery EasyUI菜单与按钮详解
2016/07/13 Javascript
JavaScript ES6中CLASS的使用详解
2016/11/22 Javascript
js定时器+简单的动画效果实例
2017/11/10 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
Vue中如何实现proxy代理
2018/04/20 Javascript
移动端图片上传旋转、压缩问题的方法
2018/10/16 Javascript
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
vue 中this.$set 动态绑定数据的案例讲解
2021/01/29 Vue.js
Python操作mongodb数据库的方法详解
2018/12/08 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
美国儿童玩具、装扮和玩偶商店:Magic Cabin
2018/09/02 全球购物
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
了解AppleShare protocol(AppleShare协议)吗
2015/08/28 面试题
大学毕业感言50字
2014/02/07 职场文书
4S店售后客服自我评价
2014/04/09 职场文书
电影红河谷观后感
2015/06/11 职场文书
保护地球的宣传语
2015/07/13 职场文书
施工安全协议书
2016/03/22 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
如何使JavaScript休眠或等待
2021/04/27 Javascript
Python学习之时间包使用教程详解
2022/03/21 Python