Vue中import from的来源及省略后缀与加载文件夹问题


Posted in Javascript onFebruary 09, 2020

Vue使用import ... from ...来导入组件,库,变量等。而from后的来源可以是js,vue,json。这个是在webpack.base.conf.js中设置的:

module.exports = {
 resolve: {
  extensions: ['.js', '.vue', '.json'],
  alias: {
   '@': resolve('src')
  }
 }
...
}

这里的extensions指定了from后可导入的文件类型。

而上面定义的这3类可导入文件,js和vue是可以省略后缀的:

import test from './test.vue'

等同于:

import test from './test'

同理:

import test from './test.js'

等同于:

import test from './test'

json不可以省略后缀:

import test from './test.json'

省略为:

import test from './test'

则编译出错。

那么,若test.vue,test.js同时存在于同一个文件夹下,则import的导入优先级是:

js>vue

from后的来源除了文件,还可以是文件夹:

import test from './components'

该情况下的逻辑是:

if(package.json存在 && package.main字段存在 && package.main指定的js存在) {
  取package.main指定的js作为from的来源,即使该js可能格式或内容错误
} else if(index.js存在){
  取index.js作为from的来源
} else {
  取index.vue作为from的来源
}

因此若from的来源是文件夹,那么在package.json存在且设置正确的情况下,会默认加载package.json;若不满足,则加载index.js;若不满足,则加载index.vue。

注意加载文件夹的形式,与上面省略后缀的形式是完全相同的。所以一个省略后缀的from来源,有可能是.vue,.js,或者文件夹。

例:

查看Vue-Element-Admin的源码,其中有个Layout.vue:

Vue中import from的来源及省略后缀与加载文件夹问题

里面调用import导入了3个组件:

import { Navbar, Sidebar, AppMain } from './components'

这里,from的路径'./components'就是个文件夹。

于是,按照前面的规则,首先查看文件夹下是否有package.json:

Vue中import from的来源及省略后缀与加载文件夹问题

并没有package.json。

package.json不存在,那么查找index.js。index.js是存在的,于是加载。

打开index.js:

export { default as Navbar } from './Navbar'

export { default as Sidebar } from './Sidebar'

export { default as AppMain } from './AppMain'

可以看到3个export,都没有后缀,所以其类型vue,js和文件夹都是有可能的。

同一级目录下,存在AppMain.vue和Navbar.vue,没有同名js,所以可以判断出这两个都是加载的vue文件,即:

export { default as Navbar } from './Navbar.vue'

export { default as AppMain } from './AppMain.vue'

而Sidebar只有一个文件夹,所以是加载的文件夹。打开Sidebar文件夹:

Vue中import from的来源及省略后缀与加载文件夹问题

优先找package.json。不存在。

然后找index.js,不存在。

最后找index.vue,存在。

于是:

export { default as Sidebar } from './Sidebar'

相当于:

export { default as Sidebar } from './Sidebar/index.vue'

这样,Layout.vue就通过加载一个文件夹,获得了3个vue组件。

总结

以上所述是小编给大家介绍的Vue中import from的来源及省略后缀与加载文件夹,希望对大家有所帮助!

Javascript 相关文章推荐
文字幻灯片
Jun 26 Javascript
User Scripts: Video Download by User Scripts
May 14 Javascript
JavaScript 自动完成脚本整理(33个)
Oct 20 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
Jul 05 Javascript
使用jQuery实现更改默认alert框体
Apr 13 Javascript
解决jquery实现的radio重新选中的问题
Jul 03 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
Nov 18 Javascript
Three.js实现绘制字体模型示例代码
Sep 26 Javascript
详解http访问解析流程原理
Oct 18 Javascript
Element-UI中Upload上传文件前端缓存处理示例
Feb 21 Javascript
ES6如何用一句代码实现函数的柯里化
Jan 18 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
Jul 31 Javascript
如何基于javascript实现贪吃蛇游戏
Feb 09 #Javascript
javascript浅层克隆、深度克隆对比及实例解析
Feb 09 #Javascript
通过javascript实现扫雷游戏代码实例
Feb 09 #Javascript
jQuery实现简单聊天室
Feb 08 #jQuery
jquery实现点击弹出对话框
Feb 08 #jQuery
jQuery实现简易聊天框
Feb 08 #jQuery
jquery添加div实现消息聊天框
Feb 08 #jQuery
You might like
PHP将XML转数组过程详解
2013/11/13 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
PHP APC配置文件2套和参数详解
2014/06/11 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
2016/05/19 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
2018/12/05 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
js getBoundingClientRect() 来获取页面元素的位置
2010/11/25 Javascript
拥抱模块化的JavaScript
2012/03/07 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
用vue写一个日历
2020/11/02 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
Python对列表中的各项进行关联详解
2017/08/15 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
对Python多线程读写文件加锁的实例详解
2019/01/14 Python
详解Python self 参数
2019/08/30 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
Python基于os.environ从windows获取环境变量
2020/06/09 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
纯CSS3实现圆圈动态发光特效动画的示例代码
2021/03/08 HTML / CSS
vivo智能手机官方商城:vivo
2016/09/22 全球购物
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
领导干部培训感言
2014/01/23 职场文书
《去年的树》教学反思
2014/04/11 职场文书
基层党支部公开承诺书
2014/05/29 职场文书
贫困证明模板(3篇)
2014/09/16 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
2014年小学美术工作总结
2014/12/20 职场文书
小学毕业感言100字
2015/07/30 职场文书
2016年三八节红领巾广播稿
2015/12/17 职场文书
详细聊聊vue中组件的props属性
2021/11/02 Vue.js
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS