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创建自定义表格具体实现
Feb 11 Javascript
jQuery ajax serialize() 方法使用示例
Nov 02 Javascript
React中ES5与ES6写法的区别总结
Apr 21 Javascript
js canvas实现擦除效果示例代码
Apr 26 Javascript
jQuery UI Draggable + Sortable 结合使用(实例讲解)
Sep 07 jQuery
bootstrap fileinput插件实现预览上传照片功能
Jan 23 Javascript
vue 1.0 结合animate.css定义动画效果
Jul 11 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
Aug 09 Javascript
TypeScript开发Node.js程序的方法
Apr 30 Javascript
vue router总结 $router和$route及router与 router与route区别
Jul 05 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
Sep 01 Javascript
Nest.js 授权验证的方法示例
Feb 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
一个php作的文本留言本的例子(三)
2006/10/09 PHP
PHP新手上路(十四)
2006/10/09 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
浅析PKI加密解密 OpenSSL
2013/07/01 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
php使用ob_flush不能每隔一秒输出原理分析
2015/06/02 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
2017/11/25 PHP
javascript模仿msgbox提示效果代码
2008/06/10 Javascript
js表格分页实现代码
2009/09/18 Javascript
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
解决JS外部文件中文注释出现乱码问题
2017/07/09 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
[56:12]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第一场 6.3
2018/06/04 DOTA
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
浅谈pandas中shift和diff函数关系
2018/04/08 Python
Python字符串的一些操作方法总结
2019/06/10 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
基于python实现删除指定文件类型
2020/07/21 Python
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
Carter’s官方旗舰店:美国受欢迎的婴童服装品牌
2018/01/21 全球购物
尼克松手表官网:Nixon手表
2019/03/17 全球购物
《争吵》教学反思
2014/02/15 职场文书
个人考核材料
2014/05/15 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
职务任命书范本
2014/06/05 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
Redis实现订单过期删除的方法步骤
2022/06/05 Redis