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 相关文章推荐
jQuery EasyUI API 中文文档 - ComboBox组合框
Oct 07 Javascript
原生JS实现表单checkbook获取已选择的值
Jul 21 Javascript
javascript中的document.open()方法使用介绍
Oct 09 Javascript
Javascript Web Slider 焦点图示例源码
Oct 10 Javascript
javascript实现十秒钟后注册按钮可点击的方法
May 13 Javascript
js简单倒计时实现代码
Apr 30 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
Feb 22 Javascript
微信小程序实现星星评价效果
Nov 02 Javascript
node.js实现带进度条的多文件上传
Mar 27 Javascript
vue 使用鼠标滚动加载数据的例子
Oct 31 Javascript
Vue记住滚动条和实现下拉加载的完美方法
Jul 31 Javascript
js动态添加带圆圈序号列表的实例代码
Feb 18 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数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2010/02/04 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
JQuery操作textarea,input,select,checkbox方法
2015/09/02 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
2017/01/15 Javascript
RequireJs的使用详解
2017/02/19 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
详解Node项目部署到云服务器上
2017/07/12 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
2018/01/04 Javascript
vue实现微信分享功能
2018/11/28 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
Python正则表达式常用函数总结
2017/06/24 Python
python itchat实现微信自动回复的示例代码
2017/08/14 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
利用Python的turtle库绘制玫瑰教程
2019/11/23 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
使用canvas压缩图片大小的方法示例
2019/08/02 HTML / CSS
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
安全生产宣传标语
2014/06/06 职场文书
学习型家庭事迹材料
2014/12/20 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python
win11系统中dhcp服务异常什么意思? Win11 DHCP服务异常修复方法
2022/04/08 数码科技
Golang 1.18 多模块Multi-Module工作区模式的新特性
2022/04/11 Golang