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实现下载文件流完整前后端代码
Nov 17 Vue.js
深入了解Vue3模板编译原理
Nov 19 Vue.js
详解vue-cli项目在IE浏览器打开报错解决方法
Dec 10 Vue.js
vue项目中openlayers绘制行政区划
Dec 24 Vue.js
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
vue中父子组件的参数传递和应用示例
Jan 04 Vue.js
vue实现轮播图帧率播放
Jan 26 Vue.js
详解Vue.js 可拖放文本框组件的使用
Mar 03 Vue.js
vue实现水波涟漪效果的点击反馈指令
May 31 Vue.js
vue项目多环境配置(.env)的实现
Jul 21 Vue.js
vue使用wavesurfer.js解决音频可视化播放问题
Apr 04 Vue.js
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 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
各种咖啡的英文名子是什么
2021/03/03 新手入门
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
2015/08/13 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
2016/07/06 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
使用百度地图实现地图网格的示例
2018/02/06 Javascript
vue路由拦截及页面跳转的设置方法
2018/05/24 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
python读取图片任意范围区域
2019/01/23 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
在python中使用nohup命令说明
2020/04/16 Python
keras自定义回调函数查看训练的loss和accuracy方式
2020/05/23 Python
椰子猫砂:CatSpot
2018/08/27 全球购物
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
小溪流的歌教学反思
2014/02/13 职场文书
读书活动实施方案
2014/03/10 职场文书
计划生育宣传标语
2014/06/21 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
2014银行授权委托书样本
2014/10/04 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书