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 24 Vue.js
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
详解Vue3 Teleport 的实践及原理
Dec 02 Vue.js
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
Dec 04 Vue.js
vue实现登录功能
Dec 31 Vue.js
vue-resource 拦截器interceptors使用详解
Jan 18 Vue.js
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
vue-element-admin项目导入和导出的实现
May 21 Vue.js
vue ref如何获取子组件属性值
Mar 31 Vue.js
Vue+Flask实现图片传输功能
Apr 01 Vue.js
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 Vue.js
vue @ ~ 相对路径 路径别名设置方式
Jun 05 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
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
分享PHP入门的学习方法
2007/01/02 PHP
cache_lite试用
2007/02/14 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
2011/11/07 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
一个简单的php MVC留言本实例代码(必看篇)
2016/09/22 PHP
在JavaScript中使用inline函数的问题
2007/03/08 Javascript
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
ext jquery 简单比较
2010/04/07 Javascript
javascript 实现map集合
2015/04/03 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
2015/09/09 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
jQuery中.attr()和.data()的区别分析
2017/09/03 jQuery
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
node.js到底要不要加分号浅析
2018/07/11 Javascript
JavaScript一元正号运算符示例代码
2019/06/30 Javascript
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
python调用支付宝支付接口流程
2019/08/15 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
python读取图片的几种方式及图像宽和高的存储顺序
2020/02/11 Python
Python CSS选择器爬取京东网商品信息过程解析
2020/06/01 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
python Pexpect模块的使用
2020/12/25 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
类的返射机制中的包及核心类
2016/09/12 面试题
医学生毕业自我鉴定
2014/03/26 职场文书
2014年教师学期工作总结
2014/11/08 职场文书
2014年技术员工作总结
2014/11/18 职场文书
检察院起诉意见书
2015/05/20 职场文书
隐形的翅膀观后感
2015/06/10 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
python周期任务调度工具Schedule使用详解
2021/11/23 Python