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 相关文章推荐
关于捕获用户何时点击window.onbeforeunload的取消事件
Mar 06 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
Sep 30 Javascript
基于jquery库的tab新形式使用
Nov 16 Javascript
jquery mobile事件多次绑定示例代码
Sep 13 Javascript
JavaScript的继承的封装介绍
Oct 15 Javascript
将字符串中由空格隔开的每个单词首字母大写
Apr 06 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
May 09 Javascript
Javascript的无new构建实例详解
May 15 Javascript
使用webpack3.0配置webpack-dev-server教程
May 29 Javascript
判断js数据类型的函数实例详解
May 23 Javascript
vue-cli3使用mock数据的方法分析
Mar 16 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
Aug 28 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与SQL注入攻击[一]
2007/04/17 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
2010/09/12 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
2014/07/24 PHP
PHP的几个常用加密函数
2016/02/03 PHP
php实现等比例压缩图片
2018/07/26 PHP
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
Vue Ajax跨域请求实例详解
2017/06/20 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
深入理解node.js http模块
2018/01/24 Javascript
详解基于mpvue微信小程序下载远程图片到本地解决思路
2019/05/16 Javascript
关于element-ui的隐藏组件el-scrollbar的使用
2019/05/29 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
2020/04/15 Javascript
python实现从web抓取文档的方法
2014/09/26 Python
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
ipad上运行python的方法步骤
2019/10/12 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
优秀毕业生推荐信
2013/11/02 职场文书
生物科学专业个人求职信范文
2013/12/07 职场文书
保安岗位职责
2014/02/21 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
员工工作表扬信
2015/05/05 职场文书
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js
JavaScript的Set数据结构详解
2022/02/18 Javascript
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript
MySQL事务的隔离级别详情
2022/07/15 MySQL