vue require.context()的用法实例详解

 更新时间:2023年04月06日 10:01:59   作者:白嫖leader  
require.context是webpack提供的一个api,通常用于批量注册组件,下面这篇文章主要给大家介绍了关于vue require.context()用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

require.context()的介绍

我们可以在控制台中打印require,可见require其实就是就是一个函数

我们可以打印require.prototype,查看他身上都有什么方法,都要传入哪些参数

console.log(require.prototype);

require.context参数介绍
require.context(directory,useSubdirectories,regExp)

  • directory:表示检索的目录
  • useSubdirectories:表示是否检索子文件夹
  • regExp:匹配文件的正则表达式,一般是文件名

例如 require.context(“@/views/components”,false,/.vue$/)

用法一:在组件内引入多个组件

核心代码如下

const path = require("path")
const files = require.context("@/views/00-99/requireContext/components", false, /\.vue$/)
const modules = {}
files.keys().forEach((key) => {
  const name = path.basename(key, ".vue")
  modules[name] = files(key).default || files(key)
})
console.log(modules)
export default {
  components: modules,
}

案例如下:

代码目录结如下(这个看起来可能比较乱,先将就一下吧):

有两个将会被用到的组件:

我们主要关注requireContext文件夹里面的内容即可

比如说现在有十好几个组件在components文件夹里,这些组件将要被引入02.vue中进行使用,我们不想使用import一个一个的进行引入,那么这个时候就可以使用require.context了,

代码如下:

index.js(这里指的是requireContext目录下的index.js)

const path = require("path")
const files = require.context("@/views/00-99/requireContext/components", false, /\.vue$/)
const modules = {}
files.keys().forEach((key) => {
  const name = path.basename(key, ".vue")
  modules[name] = files(key).default || files(key)
})
console.log(modules)
export default {
  components: modules,
}

02.vue

<template>
  <div>
    <COMA />
    <COMB />
  </div>
</template>

<script>
import mycomponents from "./index"
console.log(mycomponents)
export default {
  components: {
    COMA: mycomponents.components.zujianA,
    COMB: mycomponents.components.zujianB,
  },
}
</script>

<style></style>

最终的效果如下;

用法二:在main.js中引入大量公共组件

下面的代码都是在main.js,也就是项目的入口文件中写的,在这个地方将组件进行一次性全局注册,这么多的代码写在main.js中可能显得比较累赘,我们也可以使用方法三(Vue插件),使得代码看起来比较简介一些。

import Vue from 'vue'
// 自定义组件
const requireComponents = require.context('../views/components', true, /\.vue/)
// 打印结果
// 遍历出每个组件的路径
requireComponents.keys().forEach(fileName => {
  // 组件实例
  const reqCom = requireComponents(fileName)
  // 截取路径作为组件名
  const reqComName =reqCom.name|| fileName.replace(/\.\/(.*)\.vue/,'$1')
  // 组件挂载
  Vue.component(reqComName, reqCom.default || reqCom)
})

用法三:使用插件注册全局组件

我们可以新建一个js文件,使用插件的方式进行一次性全局注册

 /*
   所有在./components目录下的.vue组件自动注册为全局组件
   以<mc-***></mc-***>为组件标签名,***是组件的.name
*/
const requireContext = require.context('../components', true, /\.vue$/)
const requireAll = context => context.keys().map(context)

console.log(requireContext)
console.log(requireAll(requireContext))
export default (Vue) => {
  requireAll(requireContext).forEach(item => {
    Vue.component(`vc-${item.default.name}`, item.default)
  })
}

用法四:引入vuex的module

app.js与user.js是两个模块,将来都需要被引入到index.js中进行使用

index.js代码(modules目录下的)

import Vue from "vue"
import Vuex from "vuex"
// 省去了一大堆的import
// import app from "./modules/app"
// import user from "./modules/user"
import getters from "./getters"
Vue.use(Vuex)

const files = require.context("./modules", false, /\.js$/)
console.log("------------")
console.log(files.keys())
console.log("------------")
const modules = {}

files.keys().forEach((key) => {
  modules[key.replace(/(\.\/|\.js)/g, "")] = files(key).default
})

console.log("------------")
console.log(modules)
console.log("------------")

export default new Vuex.Store({
  // 省去了手动注册
  // modules: {
  //   app,
  //   user,
  // },
  modules: { ...modules },
  getters,
})

用法五:引入项目中所有的svg文件

const requireContext = require.context('./svg', false, /\.svg/)
const requireAll = context => context.keys().map(context)
requireAll(requireContext)

用法六:利用require.context遍历目录所有的图片

<template>
  <div id="app">
    <li v-for="(img, index) in images" :key="index">
      <p>img: {{ img }}</p>
      <img :src="imgUrl(img)" alt="" />
    </li>
  </div>
</template>

<script>
const req = require.context("@/assets/images", false, /(\.jpg|\.gif)$/)

export default {
  name: "App",
  data() {
    return {
      images: [],
    }
  },
  created() {
    this.images = req.keys()
  },
  methods: {
    imgUrl(path) {
      return req(path)
    },
  },
}
</script>

<style>
img {
  height: 30px;
}
</style>

总结 

到此这篇关于vue require.context()用法详解的文章就介绍到这了,更多相关require.context()用法详解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue3源码分析侦听器watch的实现原理

    Vue3源码分析侦听器watch的实现原理

    watch 的本质就是观测一个响应式数据,当数据发生变化时通知并执行相应的回调函数。watch的实现利用了effect 和 options.scheduler 选项,这篇文章主要介绍了Vue3源码分析侦听器watch的实现原理,需要的朋友可以参考下
    2022-08-08
  • Vue-admin-template 添加、跳转子页面问题

    Vue-admin-template 添加、跳转子页面问题

    这篇文章主要介绍了Vue-admin-template 添加、跳转子页面问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • 使用Vue.js和Flask来构建一个单页的App的示例

    使用Vue.js和Flask来构建一个单页的App的示例

    本篇文章主要介绍了使用Vue.js和Flask来构建一个单页的App的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • vue-cli3单页构建大型项目方案

    vue-cli3单页构建大型项目方案

    这篇文章主要介绍了vue-cli3单页构建大型项目方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Vue数据双向绑定的深入探究

    Vue数据双向绑定的深入探究

    这篇文章主要给大家介绍了关于Vue数据双向绑定的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • vue如何将字符串的一部分处理为html文档并渲染到页面

    vue如何将字符串的一部分处理为html文档并渲染到页面

    这篇文章主要介绍了vue如何将字符串的一部分处理为html文档并渲染到页面,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 基于Vue开发一个很火的卡片动画效果

    基于Vue开发一个很火的卡片动画效果

    这篇文章主要为大家详细介绍了如何基于Vue开发一个很火的卡片动画效果,大致包含两个效果,光的跟随效果还有卡片倾斜像 3D 的效果,感兴趣的可以了解一下
    2024-02-02
  • Vue项目中Api的组织和返回数据处理的操作

    Vue项目中Api的组织和返回数据处理的操作

    这篇文章主要介绍了Vue项目中Api的组织和返回数据处理的操作,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • vue如何批量引入组件、注册和使用详解

    vue如何批量引入组件、注册和使用详解

    这篇文章主要给大家介绍了关于vue如何批量引入组件、注册和使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • vue2.* element tabs tab-pane 动态加载组件操作

    vue2.* element tabs tab-pane 动态加载组件操作

    这篇文章主要介绍了vue2.* element tabs tab-pane 动态加载组件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07

最新评论