index.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. /*
  2. * @Author: gitboyzcf boyzcf@qq.com
  3. * @Date: 2023-12-11 09:45:44
  4. * @LastEditors: gitboyzcf boyzcf@qq.com
  5. * @LastEditTime: 2023-12-20 14:00:23
  6. * @FilePath: \project-group\gy-project-group\BusinessServices\src\directives\index.js
  7. */
  8. import { kebabCase } from 'lodash-es'
  9. function validatorModules(obj) {
  10. const vueDirectiveKeys = [
  11. 'created',
  12. 'beforeMount',
  13. 'mounted',
  14. 'beforeUpdate',
  15. 'updated',
  16. 'beforeUnmount',
  17. 'unmounted'
  18. ]
  19. return vueDirectiveKeys.some((key) => Reflect.has(obj, key))
  20. }
  21. export default {
  22. install: (app) => {
  23. const directiveModules = import.meta.glob('./modules/*.js', { eager: true })
  24. Object.keys(directiveModules).forEach((key) => {
  25. const directiveName = key.replace(/^\.\/modules\/(.*)\.js$/, '$1')
  26. const modules = directiveModules[key].default
  27. if (typeof modules === 'function' || typeof modules === 'object') {
  28. if (typeof modules === 'object' && !validatorModules(modules)) {
  29. console.error(
  30. `${directiveName} 应该包含 created | beforeMount | mounted | beforeUpdate | updated | beforeUnmount | unmounted 等接口`
  31. )
  32. }
  33. app.directive(kebabCase(directiveName), modules)
  34. } else {
  35. console.error(`directive 模块的 ${directiveName}.js 导出的不是一个对象或者函数`)
  36. }
  37. })
  38. }
  39. }