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 静态对象和构造函数的使用和公私问题
Mar 02 Javascript
js 小贴士一星期合集
Apr 07 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
May 04 Javascript
jquery实现浮动的侧栏实例
Jun 25 Javascript
javascript实现树形菜单的方法
Jul 17 Javascript
JS原型对象的创建方法详解
Jun 16 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
Mar 10 Javascript
Angular中的$watch方法详解
Sep 18 Javascript
JS实现标签滚动切换效果
Dec 25 Javascript
vue项目前端错误收集之sentry教程详解
May 27 Javascript
聊聊鉴权那些事(推荐)
Aug 22 Javascript
JS继承定义与使用方法简单示例
Feb 19 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实现的MySQL数据浏览器
2007/03/11 PHP
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
2012/04/02 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
基于Node.js的JavaScript项目构建工具gulp的使用教程
2016/05/20 Javascript
深入浅析knockout源码分析之订阅
2016/07/12 Javascript
jQuery Easyui datagrid连续发送两次请求问题
2016/12/13 Javascript
angular 动态组件类型详解(四种组件类型)
2017/02/22 Javascript
在vue项目中promise解决回调地狱和并发请求的问题
2020/11/09 Javascript
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
如何用itertools解决无序排列组合的问题
2017/05/18 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
2018/03/19 Python
python实现超市扫码仪计费
2018/05/30 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
美国婴儿和儿童服装购物网站:PatPat
2020/10/01 全球购物
法律专业自我鉴定
2013/10/03 职场文书
个人自我鉴定
2013/11/07 职场文书
房地产融资计划书
2014/01/10 职场文书
村抢险救灾方案
2014/05/09 职场文书
超越自我演讲稿
2014/05/21 职场文书
模范教师事迹材料
2014/12/16 职场文书
酒店工程部主管岗位职责
2015/04/16 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
元旦主持词开场白
2015/05/29 职场文书
辩论会主持词
2015/07/03 职场文书
如何书写邀请函?
2019/06/24 职场文书
实现一个简单得数据响应系统
2021/11/11 Javascript
python自动化测试之Selenium详解
2022/03/13 Python