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 相关文章推荐
JSON扫盲帖 JSON.as类教程
Feb 16 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
Jan 31 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
Jan 16 Javascript
jQuery实现鼠标经过显示动画边框特效
Mar 24 jQuery
Vue学习之路之登录注册实例代码
Jul 06 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
Oct 16 Javascript
解析vue data不可以使用箭头函数问题
Jul 03 Javascript
element ui table 增加筛选的方法示例
Nov 02 Javascript
socket在egg中的使用实例代码详解
May 30 Javascript
vue 中固定导航栏的实例代码
Nov 01 Javascript
React实现类似淘宝tab居中切换效果的示例代码
Jun 02 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
Sep 21 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/04/24 PHP
php smarty模板引擎的6个小技巧
2014/04/24 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
js获取div高度的代码
2008/08/09 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
Jquery 绑定时间实现代码
2011/05/03 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
JS实现点餐自动选择框(案例分析)
2019/12/10 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
Python logging模块学习笔记
2014/05/24 Python
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
Ubuntu 下 vim 搭建python 环境 配置
2017/06/12 Python
详解Python中 sys.argv[]的用法简明解释
2017/12/20 Python
理论讲解python多进程并发编程
2018/02/09 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
Pycharm调试程序技巧小结
2020/08/08 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
2014年环保局工作总结
2014/12/11 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
六年级情感作文之500字
2019/10/23 职场文书
MySQL的安装与配置详细教程
2021/06/26 MySQL