index1.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import Vue from 'vue';
  2. import path from 'path';
  3. export function SET_SERVICE({ store }) {
  4. const files = require.context('@/service/', true, /\.js$/);
  5. const ignore = ['./request.js'];
  6. let modules = {};
  7. Vue.prototype.$service = modules;
  8. store.$service = modules;
  9. const promises = files
  10. .keys()
  11. .filter(e => !ignore.includes(e))
  12. .map(e => {
  13. if (e.includes('--ignore')) {
  14. return false;
  15. }
  16. return new Promise(resolve => {
  17. const list = e.substr(2).split('/');
  18. const parents = list.slice(0, list.length - 1);
  19. const name = path.basename(e, '.js');
  20. let curr = modules;
  21. let prev = null;
  22. let key = null;
  23. parents.forEach(k => {
  24. if (!curr[k]) {
  25. curr[k] = {};
  26. }
  27. prev = curr;
  28. curr = curr[k];
  29. key = k;
  30. });
  31. let n = e.replace('./', '');
  32. import(`@/service/${n}`).then(ep => {
  33. if (ep.default) {
  34. const service = new ep.default();
  35. if (name == 'index') {
  36. prev[key] = service;
  37. } else {
  38. curr[name] = service;
  39. }
  40. } else {
  41. console.error(`Service must export default [${e}]`);
  42. }
  43. resolve();
  44. });
  45. });
  46. });
  47. return Promise.all(promises);
  48. }