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 相关文章推荐
ESLint 是如何检查 .vue 文件的
Nov 30 Vue.js
vue使用exif获取图片经纬度的示例代码
Dec 11 Vue.js
vue+openlayers绘制省市边界线
Dec 24 Vue.js
Vue 修改网站图标的方法
Dec 31 Vue.js
Vue中引入svg图标的两种方式
Jan 14 Vue.js
Vue单页面应用中实现Markdown渲染
Feb 14 Vue.js
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
Mar 01 Vue.js
如何理解Vue简单状态管理之store模式
May 15 Vue.js
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 Vue.js
vue项目支付功能代码详解
Feb 18 Vue.js
ant design vue的form表单取值方法
Jun 01 Vue.js
vue实现简易音乐播放器
Aug 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
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
微信公众平台开发之天气预报功能
2015/08/31 PHP
PHP测试成功的邮件发送案例
2015/10/26 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
My Desktop :) 桌面式代码
2008/12/29 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
2013/11/22 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
Python 不同对象比较大小示例探讨
2014/08/21 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
python将list转为matrix的方法
2018/12/12 Python
python 在指定范围内随机生成不重复的n个数实例
2019/01/28 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
CSS3 :nth-child()伪类选择器实现奇偶行显示不同样式
2013/11/05 HTML / CSS
米兰必去买手店排行榜首位:Antonioli
2016/09/11 全球购物
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
意向书范文
2014/03/31 职场文书
高中班主任评语大全
2014/04/25 职场文书
招标保密承诺书
2015/01/20 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
总结一些Java常用的加密算法
2021/06/11 Java/Android
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle
Python OpenCV实现图像模板匹配详解
2022/04/07 Python
使用python绘制横竖条形图
2022/04/21 Python