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 变量基础知识
Nov 07 Javascript
让div层随鼠标移动的实现代码 ie ff
Dec 18 Javascript
关于JavaScript中原型继承中的一点思考
Jul 25 Javascript
移动手机APP手指滑动切换图片特效附源码下载
Nov 30 Javascript
微信js-sdk上传与下载图片接口用法示例
Oct 12 Javascript
Node.js包管理器Yarn的入门介绍与安装
Oct 17 Javascript
使用jquery给新生的th绑定hover事件的实例
Feb 10 Javascript
Node.js读取文件内容示例
Mar 07 Javascript
Router解决跨模块下的页面跳转示例
Jan 11 Javascript
对vue中v-if的常见使用方法详解
Sep 28 Javascript
JS运算符简单用法示例
Jan 19 Javascript
原生js实现下拉框选择组件
Jan 20 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 魔术方法详解
2014/11/11 PHP
php生成HTML文件的类方法
2019/10/11 PHP
JavaScript 参考教程
2006/12/29 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
函数四种调用模式以及其中的this指向
2017/01/16 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
koa socket即时通讯的示例代码
2018/09/07 Javascript
Vue配置marked链接添加target="_blank"的方法
2019/07/19 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
2019/11/09 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
python二叉树的实现实例
2013/11/21 Python
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
Python-基础-入门 简介
2014/08/09 Python
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
Python的Flask框架中实现简单的登录功能的教程
2015/04/20 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
python numpy实现rolling滚动案例
2020/06/08 Python
Python fileinput模块如何逐行读取多个文件
2020/10/05 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
python基于opencv实现人脸识别
2021/01/04 Python
python实现学生通讯录管理系统
2021/02/25 Python
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
世界上最值得信赖的多日游在线市场:TourRadar
2018/07/20 全球购物
SEPHORA丝芙兰德国官方购物网站:化妆品、护肤品和香水
2020/01/21 全球购物
非功能性需求都包括哪些方面
2013/10/29 面试题
医学专业五年以上个人求职信
2013/12/03 职场文书
韩国商务邀请函
2014/01/14 职场文书
超市5.1促销活动
2014/01/15 职场文书
英文投诉信格式
2015/07/03 职场文书
实现一个简单得数据响应系统
2021/11/11 Javascript