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,所以 尽管不在一个文件夹中,文件名仍不可以重复。

 

posted @ 2021-09-16 10:12  beiifeng  阅读(331)  评论(0)    收藏  举报