webpack的 rquire.context用法实现工程自动化的方法


Posted in Javascript onFebruary 07, 2020

最近仿写一个项目,如下目录,base内部都是一些基础的组件,但是并没有在main.js 中使用常规的方式去全局注册的,刚开始还不明白没有注册的组件怎么在全局使用的

项目目录

webpack的 rquire.context用法实现工程自动化的方法

//main.js
import global from './utils/global'
Vue.use(global)
//解释:如果自动化的代码直接写在一个js文件中直接全局的引入main.js 中也是没有问题的,
//但是这里是按照自定义插件的方式写下global文件中的就要使用vue的use方法

自定义global插件,通过全局的Vue.use(global)来调用

//global.js
import {
 Input,
 Dialog,
} from "element-ui"
import VueLazyload from "vue-lazyload"
import Meta from 'vue-meta'
import * as utils from "./index"

export default {
 install(Vue) {
 const requireComponent = require.context(
  "@/base",
  true,
  /[a-z0-9]+\.(jsx?|vue)$/i,
 )
 //console.log(requireComponent);
 //console.log(requireComponent.keys(),)
 //console.log(requireComponent.resolve,)
 //console.log(requireComponent.id,)
 //console.log(requireComponent.resolve("./tabs.vue"))
 //console.log(requireComponent("./tabs.vue"));
 //console.log(requireComponent("./tabs.vue") === require("@/base/tabs"));

 
 // 批量注册base组件
 requireComponent.keys().forEach(fileName => {
  const componentConfig = requireComponent(fileName)
  const componentName = componentConfig.default.name
  if (componentName) {
   Vue.component(componentName, componentConfig.default ||   
    componentConfig)
  }
 })
 
 Vue.prototype.$ELEMENT = { size: "small" }
 Vue.prototype.$utils = utils

 Vue.use(Input)
 Vue.use(Dialog)
 Vue.use(Meta)
 },
}

解析 require.context

const requireComponent = require.context(
  "@/base",
  true,
  /[a-z0-9]+\.(jsx?|vue)$/i,
 )

require.context返回一个webpack的上下文环境 , 返回的是一个函数,

有三个参数:

  • 要搜索的文件夹目录,(不可以是变量,webpack在编译阶段无法定位目录)
  • 是否还要再搜索他的子目录
  • 匹配文件的正则表达式
require.context(directory, useSubdirectories, regExp);

总结:

  • require.context模块返回一个函数,这个函数可以接受一个参数,
  • require.context 的第一个参数不可以是变量,webpack在编译阶段无法定位到目录
  • 有三个属性和方法, resolve , keys , id
    • resolve 是一个函数,传入文件的路径得到解析后的模块的id
    • keys 是一个函数 , 返回所有文件路径组成的数组
    • id 是上下文环境中包含的模块的id , 可能在使用module.hot.accept (热模块更新)时使用

看下面两幅图片解析的更清晰

webpack的 rquire.context用法实现工程自动化的方法

webpack的 rquire.context用法实现工程自动化的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用JavaScript脚本实现Web页面信息交互
Oct 11 Javascript
Javascript 检测、添加、移除样式(className)函数代码
Sep 08 Javascript
JQUERY设置IFRAME的SRC值的代码
Nov 30 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
Aug 14 Javascript
js innerHTML 改变div内容的方法
Aug 03 Javascript
Javascript合并表格中具有相同内容单元格示例
Aug 11 Javascript
使用jQuery动态加载js脚本文件的方法
Apr 03 Javascript
js实现感应鼠标图片透明度变化的方法
Feb 20 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
Feb 23 Javascript
JS实现的网页背景闪电闪烁效果代码
Oct 17 Javascript
JS防抖和节流实例解析
Sep 24 Javascript
ES6中的Javascript解构的实现
Oct 30 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
Feb 07 #Javascript
vue-cli设置css不生效的解决方法
Feb 07 #Javascript
js生成1到100的随机数最简单的实现方法
Feb 07 #Javascript
JavaScript实现飞舞的泡泡效果
Feb 07 #Javascript
JavaScript实现Excel表格效果
Feb 07 #Javascript
js实现自动播放匀速轮播图
Feb 06 #Javascript
node爬取新型冠状病毒的疫情实时动态
Feb 06 #Javascript
You might like
在smarty中调用php内置函数的方法
2013/02/07 PHP
php记录代码执行时间(实现代码)
2013/07/05 PHP
php mysql获取表字段名称和字段信息的三种方法
2016/11/13 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
封装的原生javascript弹出层代码
2010/09/24 Javascript
js创建对象的几种常用方式小结(推荐)
2010/10/24 Javascript
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
2016/12/09 Javascript
详解基于angular路由的requireJs按需加载js
2017/01/20 Javascript
javascript滚轮事件基础实例讲解(37)
2017/02/14 Javascript
bootstrap table服务端实现分页效果
2017/08/10 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
微信小程序 数据绑定及运算的简单实例
2017/09/20 Javascript
JavaScript基于用户照片姓名生成海报
2020/05/29 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
[51:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第二局
2016/03/03 DOTA
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
python字典DICT类型合并详解
2017/08/17 Python
python中实现指定时间调用函数示例代码
2017/09/08 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
python用for循环求和的方法总结
2019/07/08 Python
Python 进程之间共享数据(全局变量)的方法
2019/07/16 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
学前教育专业求职信
2014/09/02 职场文书
高中生学习计划书
2014/09/15 职场文书
2015年双拥工作总结
2015/04/08 职场文书
在职证明格式样本
2015/06/15 职场文书
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python
使用Python通过企业微信应用给企业成员发消息
2022/04/18 Python