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
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 Vue.js
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
vue实现简易的双向数据绑定
Dec 29 Vue.js
Vue.extend 登录注册模态框的实现
Dec 29 Vue.js
vuex的使用和简易实现
Jan 07 Vue.js
vue前端工程的搭建
Mar 31 Vue.js
浅谈vue2的$refs在vue3组合式API中的替代方法
Apr 18 Vue.js
vue基于Teleport实现Modal组件
May 31 Vue.js
vue实现移动端div拖动效果
Mar 03 Vue.js
vue3引入highlight.js进行代码高亮的方法实例
Apr 08 Vue.js
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
Apr 11 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后台微信支付和支付宝支付开发
2017/04/28 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
javascript 模式设计之工厂模式学习心得
2010/04/27 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
Vue.js每天必学之内部响应式原理探究
2016/09/07 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
2017/04/01 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
Django ORM框架的定时任务如何使用详解
2017/10/19 Python
Python实现直方图均衡基本原理解析
2019/08/08 Python
Python headers请求头如何实现快速添加
2020/11/03 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
年度考核自我鉴定
2013/11/09 职场文书
大学生村官事迹材料
2014/01/21 职场文书
写好自荐信需做到的5要点
2014/03/07 职场文书
股票投资建议书
2014/05/19 职场文书
党员干部廉洁承诺书
2014/05/28 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
2015年党建工作总结
2015/03/30 职场文书
员工给公司的建议书
2019/06/24 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书
Vue Mint UI mt-swipe的使用方式
2022/06/05 Vue.js