webpack的 rquire.context用法实现工程自动化的方法
作者:禅来蝉去 发布时间:2024-05-11 09:05:29
标签:webpack,rquire.context,工程自动化
最近仿写一个项目,如下目录,base内部都是一些基础的组件,但是并没有在main.js 中使用常规的方式去全局注册的,刚开始还不明白没有注册的组件怎么在全局使用的
项目目录
//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 (热模块更新)时使用
看下面两幅图片解析的更清晰
来源:https://segmentfault.com/a/1190000021693103


猜你喜欢
- 测试1deco运行,但myfunc并没有运行def deco(func): print 'bef
- Python 字符串描述Python rstrip() 删除 string 字符串末尾的指定字符(默认为空格).语法rstrip()方法语法
- 在python中读取一个文本文件相信大家都比较熟悉了,但如果我们遇到一个二进制文件要读取怎么办呢?我们尝试使用 Python 中的内置 op
- 1.聚合运算(1)使用内置的聚合运算函数进行计算1>内置的聚合运算函数sum(),mean(),max(),min(),size(),
- 索引初识最普通的情况,是为出现在where子句的字段建一个索引。为方便讲述,我们先建立一个如下的表。CREATE TABLE mytable
- 先看看效果图:简单的分页js代码:1、效果描述: 不用分页即可显示的jQuery插件 jQuery分页插件——jQu
- 需求:给定一个dataframe和一个list,list中存放的是dataframe中某一列的元素,删除dataframe中与list元素重
- MySQL加密和解密实例详解数据加密、解密在安全领域非常重要。对程序员而言,在数据库中以密文方式存储用户密码对入侵者剽窃用户隐私意义重大。有
- actions异步修改状态与mutations同步修改状态是两个容易混淆的概念,因为两者在执行上,很难测试出两者的差别,而我们要区别它们两,
- 本文实例讲述了go语言操作redis连接池的方法。分享给大家供大家参考。具体实现方法如下:func newPool(server, pass
- Python自动化脚本登录校园网所需工具:python编译环境(博主使用的pycharm作演示,其实在cmd也可以操作!)selenium自
- 缘起这段时间给朋友搞了个群发邮件的脚本,为了防止进入垃圾邮件,做了很多工作,刚搞完,垃圾邮件进入率50%,觉得还不错,如果要将垃圾邮件的进入
- Hello World一个简单的hello world例子:#!/usr/bin/env perluse strict;use warnin
- 此问题是由于最新的pycharm在安装时自动装了vimVim插件 你可以在tools Vim emulator将对勾去掉就可以了。来源:ht
- <!DOCTYPE html PUBLIC "-//W3C//DTD X
- 下面先来看一个例子:import requestsresult=requests.get("http://data.1
- 【名称】Abs【类别】数学函数【原形】Abs(number)【参数】必选的。Number参数是一个任何有效的数值型表达式【返回值】同numb
- 通过手动输入数据,将数据分成几部分存入数组中import osimport sysdef test(): bric
- 最近在刚从tensorflow转入pytorch,对于自定义的nn.Module 碰到了个问题,即使把模组 modle=Model().cu