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 相关文章推荐
javascript showModalDialog模态对话框使用说明
Dec 31 Javascript
jquery监控数据是否变化(修正版)
Apr 12 Javascript
jquery实现每个数字上都带进度条的幻灯片
Feb 20 Javascript
jQuery查询数据返回object和字符串影响原因是什么
Aug 09 Javascript
JavaScript中的立即执行函数表达式介绍
Mar 15 Javascript
JavaScript取得键盘按下方向键是哪个的方法
Aug 04 Javascript
JavaScript如何动态创建table表格
Aug 02 Javascript
jquery获取form表单input元素值的简单实例
May 30 Javascript
JS实现json的序列化和反序列化功能示例
Jun 13 Javascript
微信小程序之滚动视图容器的实现方法
Sep 26 Javascript
微信小程序一周时间表功能实现
Oct 17 Javascript
JS canvas实现画板和签字板功能
Feb 23 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 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
2010/02/26 Javascript
JavaScript全局函数使用简单说明
2011/03/11 Javascript
Node.js文件操作详解
2014/08/16 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
2017/06/04 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
webpack打包react项目的实现方法
2018/06/21 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
[37:02]OG vs INfamous 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
2015/04/24 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
在pycharm中设置显示行数的方法
2019/01/16 Python
Python画图高斯分布的示例
2019/07/10 Python
Django框架创建mysql连接与使用示例
2019/07/29 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
巴基斯坦购物网站:Goto
2019/03/11 全球购物
介绍一下SQL Server的全文索引
2013/08/15 面试题
.net面试题
2015/12/22 面试题
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
档案检查欢迎词
2014/01/13 职场文书
设计师求职信
2014/07/01 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
医生个人年终总结
2015/02/28 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
2016年暑期见闻作文
2015/11/25 职场文书