在使用vue-element-admin时。store中的index.js文件下有如下代码
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
require.context() 是 webpack 的一个特殊函数,用于在模块中请求一组模块。它返回一个函数,该函数有三个属性:resolve、keys 和 id。
resolve 用于查找模块的绝对路径。
keys 返回一个包含所有可能请求的模块名称的数组。
id 返回上下文模块的ID。
举个例子:
const context = require.context('./test', false, /\.test\.js$/);
console.log(context.keys());
// ["./a.test.js", "./b.test.js"]
console.log(context('./a.test.js'));
// './test/a.test.js'
该例中第一个参数 ‘./test’ 指定了要搜索的文件夹,第二个参数 false 指定是否要搜索子文件夹,第三个参数 /.test.js$/ 指定了要搜索的文件正则表达式。
总结来说,require.context是 webpack 内置的读取文件夹模块的功能,可以在代码中调用并获取文件夹中的模块。