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常用的正则表达式实例
May 15 Javascript
jQuery中eq()方法用法实例
Jan 05 Javascript
javascript中call,apply,bind的用法对比分析
Feb 12 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
Jun 05 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
Mar 06 Javascript
Window.Open打开窗体和if嵌套代码
Apr 15 Javascript
javascript截图 jQuery插件imgAreaSelect使用详解
May 04 Javascript
js显示动态时间的方法详解
Aug 20 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
Mar 09 Javascript
这15个Vue指令,让你的项目开发爽到爆
Oct 11 Javascript
解决vue addRoutes不生效问题
Aug 04 Javascript
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
Jun 29 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
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
2012/10/11 Javascript
js 日期比较相关天数代码
2014/04/02 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
canvas学习之API整理笔记(一)
2016/12/29 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
python encode和decode的妙用
2009/09/02 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
django 取消csrf限制的实例
2020/03/13 Python
Python正则表达式如何匹配中文
2020/05/27 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
《最佳路径》教学反思
2014/04/13 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
合作协议书格式范本
2016/03/21 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
导游词之无锡梅园
2019/11/28 职场文书
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers