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 纠正 cleanWhitespace函数
Mar 11 Javascript
JavaScript 高效运行代码分析
Mar 18 Javascript
JavaScript使用replace函数替换字符串的方法
Apr 06 Javascript
js实现仿阿里巴巴城市选择框效果实例
Jun 24 Javascript
jquery ztree异步搜索(搜叶子)实践
Feb 25 Javascript
Angular2学习笔记——详解NgModule模块
Dec 02 Javascript
jquery仿苹果的时间/日期选择效果
Mar 08 Javascript
javascript图片预览和上传(兼容IE)
Mar 15 Javascript
vue2.0 父组件给子组件传递数据的方法
Jan 15 Javascript
jQuery实现标签子元素的添加和赋值方法
Feb 24 jQuery
JS实现的类似微信聊天效果示例
Jan 29 Javascript
JavaScript canvas基于数组生成柱状图代码实例
Mar 06 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中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
2011/03/29 PHP
apache php模块整合操作指南
2012/11/16 PHP
php解决和避免form表单重复提交的几种方法
2016/08/31 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
JavaScript常用函数工具集:lao-utils
2016/03/01 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
基于webpack.config.js 参数详解
2018/03/20 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
Vue自定义弹窗指令的实现代码
2018/08/13 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
javascript中UMD规范的代码推演
2018/08/29 Javascript
jquery.pager.js实现分页效果
2019/07/29 jQuery
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
vuex存储token示例
2019/11/11 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
python文件和目录操作函数小结
2014/07/11 Python
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
python 使用shutil复制图片的例子
2019/12/13 Python
通过python检测字符串的字母
2020/02/18 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
django 模型中的计算字段实例
2020/05/19 Python
python 日志模块 日志等级设置失效的解决方案
2020/05/26 Python
使用npy转image图像并保存的实例
2020/07/01 Python
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
安全生产标语大全
2014/10/06 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
赞美教师的句子
2019/09/02 职场文书