vue中require.context的使用

vue中require.context的使用

前言

vue项目中有引用很多文件的地方,例如全局组件的注册,store文件下index.js对module的引用,如果是这种写法

import user from './modules/user'
import meta from './modules/meta'
import comments from './modules/comments'
export default new Vuex.Store({
    modules: {
        user,
        meta,
        comments,
    }
})

写法繁琐,可以用require.context来批量读取指定目录下的文件和文件内容。

require.context

webpack-requirecontext

有三个参数,第一个表示读取文件的路径,第二个表示是否要循环读取子目录,第三表示文件匹配的正则。

  1. resolve {Function} -接受一个参数request,request为test文件夹下面匹配文件的相对路径,返回这个匹配文件相对于整个工程的相对路径
  2. keys {Function} -返回匹配成功模块的名字组成的数组
  3. id 上下文模块的id

reduce

reduce(()=> {total, currentValue, currentIndex, arr}, initValue)
参数
  1. 执行每条数据的函数
  2. 传递给函数的初始值,可选
函数的参数
  1. total 必需。初始值, 或者计算结束后的返回值。如果设置初始值就用初始值,否则就是函数的第一条数据
  2. currentValue 必需。当前元素

JS数组reduce方法详解

实现vuex动态引入模块文件

import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'

Vue.use(Vuex)

// https://webpack.js.org/guides/dependency-management/#requirecontext
const modulesFiles = require.context('./modules', true, /\.js$/)

// you do not need `import app from './modules/app'`
// it will auto require all vuex module from modules file
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
  // set './app.js' => 'app'
  const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
  const value = modulesFiles(modulePath)
  modules[moduleName] = value.default
  return modules
}, {})

const store = new Vuex.Store({
  modules,
  getters
})

export default store

实现动态注册全局组件

import Vue from "vue";

// 自动加载目录下的 .vue 结尾的文件
const componentsContext = require.context("./", true, /\.vue$/);

componentsContext.keys().forEach(component => {
  const componentConfig = componentsContext(component);
  // 兼容 import export 和 require module.export 两种规范
  const ctrl = componentConfig.default || componentConfig;
  Vue.component(ctrl.name, ctrl);
});

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3使用require.context会报错。这是因为在Vue 3,已经不再支持使用require.context这个方法来进行模块的自动导入了。这个方法在Vue 3的vite ts框架使用会导致错误。为了解决这个问题,可以使用import.meta.globEager来替代require.context方法。具体的解决方案是使用import.meta.globEager("../../assets/authentication/*.png")来导入模块。这样可以避免报错并成功导入所需的模块。需要注意的是,这个方法可能在不同的环境有所差异,所以需要根据具体情况来选择合适的导入方式。在Vue 2,可以使用require.context方法来实现类似的功能,具体的使用方法是先引入path和files模块,然后使用files.keys()方法获取模块的键列表,再根据键列表来动态导入模块。但是在Vue 3,需要使用import.meta.globEager方法来达到相同的效果。需要注意的是,在Vue 3,模块的导入方式有所改变,所以需要根据Vue 3的具体要求来修改代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue3+vite+ts使用require.context](https://blog.csdn.net/qq_40864647/article/details/125678833)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vue3require报错 require is not defined](https://blog.csdn.net/lys20000913/article/details/122959885)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值