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 19 Vue.js
Vue 的 v-model用法实例
Nov 23 Vue.js
vue 通过base64实现图片下载功能
Dec 19 Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 Vue.js
vue组件是如何解析及渲染的?
Jan 13 Vue.js
vue element和nuxt的使用技巧分享
Jan 14 Vue.js
Vue实现圆环进度条的示例
Feb 06 Vue.js
手动实现vue2.0的双向数据绑定原理详解
Feb 06 Vue.js
vue基于Teleport实现Modal组件
May 31 Vue.js
Vue + iView实现Excel上传功能的完整代码
Jun 22 Vue.js
Vue.js中v-bind指令的用法介绍
Mar 13 Vue.js
vue3语法糖内的defineProps及defineEmits
Apr 14 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 file_exists问题杂谈
2012/05/07 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
2014/04/09 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
2017/08/07 PHP
TP3.2框架分页相关实现方法分析
2020/06/03 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
jquery 笔记 事件
2011/11/02 Javascript
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
javascript中的startWith和endWith的几种实现方法
2013/05/07 Javascript
express的中间件basicAuth详解
2014/12/04 Javascript
javascript常用方法总结
2015/05/14 Javascript
jQuery.each使用详解
2015/07/07 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
2016/12/18 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
vue倒计时刷新页面不会从头开始的解决方法
2020/03/03 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
简单实现python数独游戏
2018/03/30 Python
python dumps和loads区别详解
2020/02/04 Python
设置jupyter中DataFrame的显示限制方式
2020/04/12 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
Agoda.com官方网站:便宜预订全球酒店,高达80%的折扣
2018/04/04 全球购物
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
商务会议邀请函
2014/01/09 职场文书
大堂副理的岗位职责范文
2014/02/17 职场文书
司法助理专业自荐书
2014/06/13 职场文书
记账会计岗位职责
2014/06/16 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
2014年内勤工作总结
2014/11/24 职场文书
全国助残日活动总结
2015/05/11 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang
一文弄懂MySQL索引创建原则
2022/02/28 MySQL
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android
使用Python拟合函数曲线
2022/04/14 Python