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 表单输入框不支持focus及blur事件的解决方案
Nov 17 Vue.js
vue的hash值原理也是table切换实例代码
Dec 14 Vue.js
Vue实现简单计算器
Jan 20 Vue.js
Vue+Bootstrap实现简易学生管理系统
Feb 09 Vue.js
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 Vue.js
vue中三级导航的菜单权限控制
Mar 31 Vue.js
解决vue $http的get和post请求跨域问题
Jun 07 Vue.js
Vue中插槽slot的使用方法与应用场景详析
Jun 08 Vue.js
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
Apr 11 Vue.js
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
解决vue自定义组件@click点击失效问题
Apr 30 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
php中文验证码实现方法
2015/06/18 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
PHP文件类型检查及fileinfo模块安装使用详解
2019/05/09 PHP
动态显示可输入的字数提示还可以输入的字数
2014/04/01 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
2017/03/23 jQuery
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
Vue项目安装插件并保存
2019/01/28 Javascript
JS利用prototype给类添加方法操作详解
2019/06/21 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
2019/09/24 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
2019/11/10 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
go语言计算两个时间的时间差方法
2015/03/13 Python
python搭建服务器实现两个Android客户端间收发消息
2018/04/12 Python
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
Python基础之函数基本用法与进阶详解
2020/01/02 Python
一些关于python 装饰器的个人理解
2020/08/31 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
关于css中margin的值和垂直外边距重叠问题
2020/10/27 HTML / CSS
Origins悦木之源香港官网:雅诗兰黛集团高端植物护肤品牌
2018/03/21 全球购物
介绍一下linux的文件权限
2012/02/15 面试题
两则小学生的自我评价分享
2013/11/14 职场文书
市场营销管理制度
2014/01/29 职场文书
群众路线个人整改措施
2014/10/24 职场文书
任命书格式范文
2015/09/22 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书
GO中sync包自由控制并发示例详解
2022/08/05 Golang