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 相关文章推荐
浏览器无法运行JAVA脚本的解决方法
Jan 09 Javascript
javascript URL锚点取值方法
Feb 25 Javascript
JS target与currentTarget区别说明
Aug 28 Javascript
浅谈Javascript Base64 加密解密
Dec 28 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
Apr 10 Javascript
javascript实现删除前弹出确认框
Jun 04 Javascript
jquery采用oop模式class类的使用示例
Jan 22 Javascript
js实现前端分页页码管理
Jan 06 Javascript
基于vue实现多引擎搜索及关键字提示
Mar 16 Javascript
React-Native中禁用Navigator手势返回的示例代码
Sep 09 Javascript
jQuery实现的简单对话框拖动功能示例
Jun 05 jQuery
送你43道JS面试题(收藏)
Jun 17 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中header的用法详解
2013/06/07 PHP
php获取汉字首字母的函数
2013/11/07 PHP
如何通过Linux命令行使用和运行PHP脚本
2015/07/29 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
Aster vs KG BO3 第三场2.19
2021/03/10 DOTA
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
javascript 数组精简技巧小结
2020/02/26 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
微信小程序实现登录注册功能
2020/12/29 Javascript
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
[10:54]Team Spirit vs Navi
2018/06/07 DOTA
[57:59]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第一场 11.05
2020/11/05 DOTA
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
Python selenium自动化测试模型图解
2020/04/15 Python
pyspark 随机森林的实现
2020/04/24 Python
Python爬取阿拉丁统计信息过程图解
2020/05/12 Python
Python中Selenium库使用教程详解
2020/07/23 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
python mock测试的示例
2020/10/19 Python
类、抽象类、接口的差异
2016/06/13 面试题
幼儿园清明节活动总结
2014/07/04 职场文书
2014年度党员自我评议
2014/09/13 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
Js类的构建与继承案例详解
2021/09/15 Javascript
Python OpenCV实现图形检测示例详解
2022/04/08 Python
Python简易开发之制作计算器
2022/04/28 Python