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 相关文章推荐
xheditor与validate插件冲突的解决方案
Apr 15 Javascript
使用Sticker.js实现贴纸效果
Jan 28 Javascript
Javascript对象Clone实例分析
Jun 09 Javascript
js实现简洁大方的二级下拉菜单效果代码
Sep 01 Javascript
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
Jan 11 Javascript
vue用递归组件写树形控件的实例代码
Jul 19 Javascript
JS无限级导航菜单实现方法
Jan 05 Javascript
详解JS实现系统登录页的登录和验证
Apr 29 Javascript
js回文数的4种判断方法示例
Jun 04 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
Apr 10 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
Jul 12 Javascript
vue切换菜单取消未完成接口请求的案例
Nov 13 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遍历数组的几种方法
2012/03/22 PHP
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
iOS10推送通知开发教程
2016/09/19 PHP
php获取当前月与上个月月初及月末时间戳的方法
2016/12/05 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
破除网页鼠标右键被禁用的绝招大全
2006/12/27 Javascript
JQuery+DIV自定义滚动条样式的具体实现
2013/06/25 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
jQuery实现的点击图片居中放大缩小功能示例
2019/01/16 jQuery
基于vue.js实现购物车
2020/01/15 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
详解Python实现进度条的4种方式
2020/01/15 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
英国最大的专业户外零售商:Mountain Warehouse
2018/06/06 全球购物
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
出国留学自荐信
2013/10/25 职场文书
自我评价格式
2014/01/06 职场文书
中学教师自我鉴定
2014/02/07 职场文书
优秀技术工人先进材料
2014/02/17 职场文书
政协调研汇报材料
2014/08/15 职场文书
高职教师先进事迹材料
2014/08/24 职场文书
夫妻吵架保证书
2015/05/08 职场文书
详解Python自动化之文件自动化处理
2021/06/21 Python
2021年国漫热度排行前十,完美世界上榜,第四是美国动画作品
2022/03/18 国漫
把77A收信机改造成收音机
2022/04/05 无线电