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 相关文章推荐
半角全角相互转换的js函数
Oct 16 Javascript
js禁止页面使用右键(简单示例代码)
Nov 13 Javascript
调用HttpHanlder的几种返回方式小结
Dec 20 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
Jan 15 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
Jan 17 Javascript
用js制作淘宝放大镜效果
Oct 28 Javascript
jQuery EasyUI ProgressBar进度条组件
Feb 28 Javascript
关于foreach循环中遇到的问题小结
May 08 Javascript
vue 项目如何引入微信sdk接口的方法
Dec 18 Javascript
你知道JavaScript Symbol类型怎么用吗
Jan 08 Javascript
基于VUE实现判断设备是PC还是移动端
Jul 03 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
Dec 07 Vue.js
如何基于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清除bom示例
2014/03/03 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
10个超级有用值得收藏的PHP代码片段
2015/01/22 PHP
PHP的Socket通信之UDP通信实例
2015/07/02 PHP
PHP版单点登陆实现方案的实例
2016/11/17 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
js Form.elements[i]的使用实例
2011/11/13 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
js判断上传文件类型判断FileUpload文件类型代码
2014/05/20 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
jquery使用remove()方法删除指定class子元素
2015/03/26 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
Bootstrap输入框组件简单实现代码
2017/03/06 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
在Python中关于中文编码问题的处理建议
2015/04/08 Python
给Python中的MySQLdb模块添加超时功能的教程
2015/05/05 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
2018/05/08 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
Python中函数的返回值示例浅析
2019/08/28 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
Python 生成VOC格式的标签实例
2020/03/10 Python
Python判断字符串是否为合法标示符操作
2020/09/03 Python
python3实现飞机大战
2020/11/29 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
Python基础之字符串格式化详解
2021/04/21 Python
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL