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使用Element实现增删改查+打包的步骤
Nov 25 Vue.js
在Vue中使用mockjs代码实例
Nov 25 Vue.js
vue动态合并单元格并添加小计合计功能示例
Nov 26 Vue.js
vue-calendar-component 封装多日期选择组件的实例代码
Dec 04 Vue.js
解决vue下载后台传过来的乱码流的问题
Dec 05 Vue.js
Vue实现点击当前行变色
Dec 14 Vue.js
Vue实现随机验证码功能
Dec 29 Vue.js
Vue实现todo应用的示例
Feb 20 Vue.js
如何理解Vue简单状态管理之store模式
May 15 Vue.js
springboot+VUE实现登录注册
May 27 Vue.js
Vue如何清空对象
Mar 03 Vue.js
使用vue判断当前环境是安卓还是IOS
Apr 12 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学习之变量的使用
2011/05/29 PHP
php实现的Captcha验证码类实例
2014/09/22 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
setTimeout自动触发一个js的方法
2014/01/15 Javascript
jquery检测input checked 控件是否被选中的方法
2014/03/26 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
2016/09/05 Javascript
微信小程序 前端源码逻辑和工作流详解
2016/10/08 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
JavaScript 实现同时选取多个时间段的方法
2019/10/17 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
Python对象类型及其运算方法(详解)
2017/07/05 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
Django开发中的日志输出的方法
2018/07/02 Python
python调用动态链接库的基本过程详解
2019/06/19 Python
如何快速理解python的垃圾回收机制
2020/09/01 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
酒店管理自荐信
2013/10/23 职场文书
2014年话务员工作总结
2014/11/19 职场文书
奔腾年代观后感
2015/06/09 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
elasticSearch-api的具体操作步骤讲解
2021/06/28 Java/Android
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫