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 相关文章推荐
node.js入门教程迷你书、node.js入门web应用开发完全示例
Apr 06 Javascript
七个很有意思的PHP函数
May 12 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
May 10 Javascript
jquery-mobile表单的创建方法详解
Nov 23 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
Nov 30 Javascript
详解AngularJS ng-class样式切换
Jun 27 Javascript
react-native封装插件swiper的使用方法
Mar 20 Javascript
浅谈Node.js 沙箱环境
May 15 Javascript
vue.js 实现点击展开收起动画效果
Jul 07 Javascript
JQuery的加载和选择器用法简单示例
May 13 jQuery
记录vue做微信自定义分享的一些问题
Sep 12 Javascript
详解Vue 单文件组件的三种写法
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实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
ThinkPHP自动验证失败的解决方法
2011/06/09 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
PHP获取文件相对路径的方法
2015/02/26 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
js实现canvas图片与img图片的相互转换的示例
2017/08/31 Javascript
Vue.js实现tab切换效果
2019/07/24 Javascript
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
Python实现读取json文件到excel表
2017/11/18 Python
Python3实现转换Image图片格式
2018/06/21 Python
Flask框架配置与调试操作示例
2018/07/23 Python
pandas中DataFrame修改index、columns名的方法示例
2019/08/02 Python
Python进程池Pool应用实例分析
2019/11/27 Python
python中判断文件结束符的具体方法
2020/08/04 Python
在 Python 中使用 MQTT的方法
2020/08/18 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
Groupon法国官方网站:特卖和网上购物高达-70%
2019/09/02 全球购物
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
小学优秀班主任事迹材料
2014/05/17 职场文书
秋季运动会演讲稿
2014/09/16 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
教学反思怎么写
2016/02/24 职场文书
React Hook用法示例详解(6个常见hook)
2021/04/28 Javascript
java设计模式--原型模式详解
2021/07/21 Java/Android