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 function调用时的参数检测常用办法
Feb 26 Javascript
用Javascript实现Windows任务管理器的代码
Mar 27 Javascript
JS实现字体选色板实例代码
Nov 20 Javascript
基于JQuery实现的Select级联
Jan 27 Javascript
table行随鼠标移动变色示例
May 07 Javascript
javascript监听鼠标滚轮事件浅析
Jun 05 Javascript
jquery修改网页背景颜色通过css方法实现
Jun 06 Javascript
js修改onclick动作的四种方法(推荐)
Aug 18 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
Sep 22 Javascript
详解ES6之async+await 同步/异步方案
Sep 19 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
Aug 20 Javascript
Vue的双向数据绑定实现原理解析
Feb 17 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 读取和修改大文件的某行内容的代码
2009/10/30 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
ThinkPHP基本的增删查改操作实例教程
2014/08/22 PHP
PHP面向对象程序设计之类与反射API详解
2016/12/02 PHP
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
JavaScript中常用的六种互动方法示例
2015/03/13 Javascript
Jquery中request和request.form和request.querystring的区别
2015/11/26 Javascript
JavaScript原生数组Array常用方法
2017/04/06 Javascript
详解layui弹窗父子窗口之间传参数的方法
2018/01/16 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
浅谈django中的认证与登录
2016/10/31 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
python按行读取文件,去掉每行的换行符\n的实例
2018/04/19 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
韩国爱茉莉太平洋化妆品美国站:Amore Pacific US
2016/10/28 全球购物
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
俄罗斯珠宝市场的领导者之一:Бронницкий ювелир
2019/10/02 全球购物
深圳茁壮笔试题
2015/05/28 面试题
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
安全教育第一课观后感
2015/06/17 职场文书
大学生创业计划书
2019/06/24 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
详解Redis实现限流的三种方式
2021/04/27 Redis