webpack的 rquire.context用法实现工程自动化的方法

 更新时间:2020年02月07日 09:44:02   作者:禅来蝉去  
这篇文章主要介绍了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 (热模块更新)时使用

看下面两幅图片解析的更清晰

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 解决EventSource 删除单词的前置空格问题记录

    解决EventSource 删除单词的前置空格问题记录

    EventSource是HTML5中的一种新的API,用来实现服务器端向客户端推送事件,相比于常规的轮询方式,EventSource可以实现更加高效、低延迟的数据传输,这篇文章主要介绍了解决EventSource 删除单词的前置空格问题记录,需要的朋友可以参考下
    2024-03-03
  • JavaScript创建类/对象的几种方式概述及实例

    JavaScript创建类/对象的几种方式概述及实例

    JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活的,下面与大家分享下创建类/对象的几种方式,感兴趣的朋友可以了解下哈
    2013-05-05
  • JS的参数传递示例介绍

    JS的参数传递示例介绍

    想必大家对参数传递并不陌生吧,本文为大家介绍下JS的参数传递,需要的朋友可以参考下
    2014-02-02
  • uniapp项目使用防抖及节流的方案实战

    uniapp项目使用防抖及节流的方案实战

    防抖就是指触发事件后把触发非常频繁的事件合并成一次去执行,节流是指频繁触发事件时只会在指定的时间段内执行事件回调,即触发事件间隔大于等于指定的时间才会执行回调函数,这篇文章主要给大家介绍了关于uniapp项目使用防抖及节流的相关资料,需要的朋友可以参考下
    2023-01-01
  • JS 打印功能代码可实现打印预览、打印设置等

    JS 打印功能代码可实现打印预览、打印设置等

    一个不错的JS 打印功能代码,包括打印预览、打印设置等,里面整合了很多知识,是一个不错的学习案例
    2014-10-10
  • JavaScript单一职责原则深入分析

    JavaScript单一职责原则深入分析

    这篇文章主要介绍了理解JavaScript单一职责原则,单一职责原则(SRP:Single responsibility principle)又称单一功能原则,面向对象五个基本原则(SOLID)之一,下文更多相关介绍感兴趣的小伙伴可以参考一下
    2022-08-08
  • ES6学习笔记之map、set与数组、对象的对比

    ES6学习笔记之map、set与数组、对象的对比

    这篇文章主要给大家介绍了关于ES6学习笔记之map、set与数组、对象对比的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • URL的参数中有加号传值变为空格的问题(URL特殊字符)

    URL的参数中有加号传值变为空格的问题(URL特殊字符)

    今天在调试客户端向服务器传递参数时,参数中的“+”全部变成了空格,原因是URL中默认的将“+”号转义了,经过以下步骤解决了,需要的朋友可以参考一下
    2016-11-11
  • JS面试题---关于算法台阶的问题

    JS面试题---关于算法台阶的问题

    下面小编就为大家带来一篇JS面试题---关于算法台阶的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07

最新评论