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 相关文章推荐
js下通过getList函数实现分页效果的代码
Sep 17 Javascript
12种不宜使用的Javascript语法整理
Nov 04 Javascript
JavaScript获取当前页面上的指定对象示例代码
Feb 28 Javascript
推荐9款炫酷的基于jquery的页面特效
Dec 07 Javascript
浅谈jQuery中replace()方法
May 13 Javascript
JS实现1000以内被3或5整除的数字之和
Feb 18 Javascript
功能强大的Bootstrap使用手册(一)
Aug 02 Javascript
微信小程序 二维码canvas绘制实例详解
Jan 06 Javascript
jquery实现的table排序功能示例
Mar 10 Javascript
Bootstrap实现各种进度条样式详解
Apr 13 Javascript
vue实现中部导航栏布局功能
Jul 30 Javascript
javascript canvas封装动态时钟
Sep 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
PHP设计模式之适配器模式定义与用法详解
2018/04/03 PHP
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
jQuery中prependTo()方法用法实例
2015/01/08 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
2016/03/25 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
2017/02/13 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
2019/05/18 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
Openlayers实现距离面积测量
2020/09/28 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
Python采用raw_input读取输入值的方法
2014/08/18 Python
python魔法方法-属性转换和类的表示详解
2016/07/22 Python
Python装饰器原理与用法分析
2018/04/30 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
对tensorflow 的模型保存和调用实例讲解
2018/07/28 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
html5 datalist标签使用示例(自动完成组件)
2014/05/04 HTML / CSS
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
银行办公室岗位职责
2014/03/10 职场文书
销售内勤岗位职责
2014/04/15 职场文书
网络编辑求职信
2014/04/30 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
原告代理词范文
2015/05/25 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
话题作文之生命的旋律
2019/12/17 职场文书
ztree+ajax实现文件树下载功能
2021/05/18 Javascript