Vuex扫描自定义文件夹下的所有文件
解决问题:当我们规范 model 统一放在某个文件夹下,且可以通过子文件夹分类。当新加model时又不想去修改别的地方。
代码
// /src/sotre/index.js
1 import { createStore } from 'vuex'; 2 3 const allComponents = require.context('.', true, /\.*[^(index)]\.js$/); 4 const resComponents = {}; 5 allComponents.keys().forEach((fileName) => { 6 const moduleName = fileName.split(/\.|\//).at(-2); 7 if (!fileName.includes('index.js')) { 8 const comp = allComponents(fileName); 9 if (resComponents[moduleName]) { 10 const see = `/src/store/${fileName}`; 11 throw new Error( 12 `already exist same namespace:${moduleName} in store. See:${see.replace( 13 '/./', 14 '/', 15 )}`, 16 ); 17 } 18 resComponents[moduleName] = comp.default; 19 } 20 }); 21 22 export default createStore({ 23 state: {}, 24 mutations: {}, 25 actions: {}, 26 getters: {}, 27 modules: resComponents, 28 });
作用:
1、扫描当前目录及子目录下的所有文件。
2、剔除所有的 index.js文件。
3、把文件名作为namespace,所以 尽管不在一个文件夹中,文件名仍不可以重复。