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 相关文章推荐
两个listbox实现选项的添加删除和搜索
Mar 01 Javascript
jQuery Mobile 和 Kendo UI 的比较
May 05 Javascript
JS读写CSS样式的方法汇总
Aug 16 Javascript
原生JS实现幻灯片
Feb 22 Javascript
shiro授权的实现原理
Sep 21 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
Oct 16 Javascript
JavaScript防止全局变量污染的方法总结
Aug 02 Javascript
微信小程序 Animation实现图片旋转动画示例
Aug 22 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
May 10 Javascript
深入解析koa之中间件流程控制
Jun 17 Javascript
用jQuery实现抽奖程序
Apr 12 jQuery
js实现计算器功能
Aug 10 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数据文件缓存类汇总
2014/12/05 PHP
实例讲解PHP验证邮箱是否合格
2019/01/28 PHP
javascript div 遮罩层封锁整个页面
2009/07/10 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
javascript中的float运算精度实例分析
2010/08/21 Javascript
JS获取数组最大值、最小值及长度的方法
2015/11/24 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
2015/12/08 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
2016/07/28 Javascript
Bootstrap源码解读媒体对象、列表组和面板(10)
2016/12/26 Javascript
js实现五星评价功能
2017/03/08 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
javascript实现Emrips反质数枚举的示例代码
2017/12/06 Javascript
详解如何配置vue-cli3.0的vue.config.js
2018/08/23 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
python list使用示例 list中找连续的数字
2014/01/27 Python
python小技巧之批量抓取美女图片
2014/06/06 Python
使用python模拟命令行终端的示例
2019/08/13 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
新手学python应该下哪个版本
2020/06/11 Python
css3绘制天猫logo实现代码
2012/11/06 HTML / CSS
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
中英文求职信范文
2014/01/27 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
单位绩效考核方案
2014/05/11 职场文书
球队口号
2014/06/18 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
2015年财务工作总结范文
2015/03/31 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
《钢铁是怎样炼成的》高中读后感
2019/08/07 职场文书
Java SSM配置文件案例详解
2021/08/30 Java/Android
python自动获取微信公众号最新文章的实现代码
2022/07/15 Python