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 相关文章推荐
细说浏览器特性检测(2)-通用事件检测
Nov 05 Javascript
javascript 运算数的求值顺序
Aug 23 Javascript
Javascript的各种节点操作实例演示代码
Jun 27 Javascript
判断是否安装flash player及当前版本的JS代码
Aug 08 Javascript
获取数组中最大最小值方法js代码(自写)
Aug 12 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
Mar 02 Javascript
js下将金额数字每三位一逗号分隔
Feb 19 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
Apr 28 Javascript
Nuxt.js实战详解
Jan 18 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
Feb 13 Javascript
vue 使用lodash实现对象数组深拷贝操作
Sep 10 Javascript
vue-router 按需加载 component: () => import() 报错的解决
Sep 22 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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
最省空间的计数器
2006/10/09 PHP
php下的权限算法的实现
2007/04/28 PHP
php数据类型判断函数有哪些
2013/09/23 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
php上传图片获取路径及给表单字段赋值的方法
2016/01/23 PHP
初识PHP中的Swoole
2016/04/05 PHP
javascript Ext JS 状态默认存储时间
2009/02/15 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
用js一次改变多个input的readonly属性值的方法
2014/06/11 Javascript
jQuery插件实现静态HTML验证码校验
2015/11/06 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
JavaScript多种页面刷新方法小结
2019/04/04 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
python+opencv实现霍夫变换检测直线
2020/10/23 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
python字符串的拼接方法总结
2019/11/18 Python
python中count函数简单的实例讲解
2020/02/06 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
Python定义一个函数的方法
2020/06/15 Python
Python图像处理之膨胀与腐蚀的操作
2021/02/07 Python
使用HTML5的链接预取功能(link prefetching)给网站提速
2012/12/13 HTML / CSS
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
房地产管理毕业生自荐信
2013/11/04 职场文书
幼儿园中班区域活动总结
2014/07/09 职场文书
婚前财产协议书范本
2014/10/19 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang