특정 방법으로 Vue.js Vuex 모듈 자동 등록
방금 Vue.js를 시작했는데 Vuex를 사용하려고 합니다.디렉토리 내에는 다음과 같은 구조가 있습니다.src/store/
store
├── index.js
└── modules
├── app
│ └── index.js
└── auth
└── index.js
각 모듈에는 1개의 파일만 있습니다.index.js
, 그 파일들 중에서getters, actions, mutations, etc
각 모듈의.
질문은 다음과 같습니다.이 모든 모듈을 에 자동 등록하려면 어떻게 해야 합니까?src/store/index.js
일일이 등록할 필요 없이 파일을 만들 수 있습니다.이 작업은 어플리케이션이 커짐에 따라 지루한 작업이 될 것입니다.또한 각 모듈이 자체 등록될 때 속성을 스스로 정의해야 합니다.namespaced: true
지금까지 시도한 내용:
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const context = require.context('./modules', true, /index.js/); //only files with the name index.js
const modules = context.keys()
.map(file => [file.replace(/(^.\/)|(\.js$)/g, ''), context(file)])
.reduce((modules, [name, module]) => {
if (module.namespaced === undefined) {
module.namespaced = true;
}
return { ...modules, [name]: module };
}, {});
const store = new Vuex.Store({
modules: modules
});
export default store;
잘 부탁드립니다.
내가 알기로는 문제는 모듈 매핑에 있습니다.context(file)
디폴트 내보내기에서는 성공했습니다.context(file).default
에 폴백합니다.context(file)
정의되지 않은 경우.난 네가 옷을 벗는 것도 안 보여'/index'
파일의 디렉토리 경로에서 파트를 선택합니다.
reduce를 사용하면 코드가 필요 이상으로 복잡해집니다.IMHO각 방법을 사용하면 쉽게 이 작업을 수행할 수 있습니다.
const context = require.context('./modules', true, /index.js/);
const modules = {};
context.keys().forEach((file) => {
// create the module name from file
const moduleName = file.replace(/(\.\/|\/index\.js$)/g, '');
// register file context under module name
modules[moduleName] = context(file).default || context(file);
// override namespaced option
modules[moduleName].namespaced = true;
});
const store = new Vuex.Store({
modules, // ES6 shorthand for modules: modules
})
export default store;
언급URL : https://stackoverflow.com/questions/61093836/vue-js-auto-register-vuex-modules-in-a-specific-way
'programing' 카테고리의 다른 글
범용 유형의 java.util을 가져옵니다.목록. (0) | 2022.08.27 |
---|---|
상태 변경 후 v-if를 사용하여 요소 숨기기 (0) | 2022.08.27 |
Vuex 이름 지정 저장소 집합 두 상태 (0) | 2022.08.27 |
EXE 또는 MSI 설치가 아닌 zip 파일로 최신 JRE/JDK를 입수하려면 어떻게 해야 합니까? (0) | 2022.08.27 |
렌더링 전에 비동기 데이터를 대기할 구성 요소 가져오기 (0) | 2022.08.27 |