办学质量监测教学评价系统
shenrongliang
2025-06-13 11d86cc6c26bb4f709e407acadf4805c2024e79f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import type { CAC } from 'cac';
 
import { getPackages } from '@vben/node-utils';
 
import depcheck from 'depcheck';
 
async function runDepcheck() {
  const { packages } = await getPackages();
  await Promise.all(
    packages.map(async (pkg) => {
      if (
        [
          '@vben/backend-mock',
          '@vben/commitlint-config',
          '@vben/eslint-config',
          '@vben/lint-staged-config',
          '@vben/node-utils',
          '@vben/prettier-config',
          '@vben/stylelint-config',
          '@vben/tailwind-config',
          '@vben/tsconfig',
          '@vben/vite-config',
          '@vben/vite-config',
          '@vben/vsh',
        ].includes(pkg.packageJson.name)
      ) {
        return;
      }
 
      const unused = await depcheck(pkg.dir, {
        ignoreMatches: [
          'vite',
          'vitest',
          'unbuild',
          '@vben/tsconfig',
          '@vben/vite-config',
          '@vben/tailwind-config',
          '@types/*',
          '@vben-core/design',
        ],
        ignorePatterns: ['dist', 'node_modules', 'public'],
      });
 
      // 删除file:前缀的依赖提示,该依赖是本地依赖
      Reflect.deleteProperty(unused.missing, 'file:');
      Object.keys(unused.missing).forEach((key) => {
        unused.missing[key] = (unused.missing[key] || []).filter(
          (item: string) => !item.startsWith('/'),
        );
        if (unused.missing[key].length === 0) {
          Reflect.deleteProperty(unused.missing, key);
        }
      });
 
      if (
        Object.keys(unused.missing).length === 0 &&
        unused.dependencies.length === 0 &&
        unused.devDependencies.length === 0
      ) {
        return;
      }
      console.error(
        '\n',
        pkg.packageJson.name,
        '\n missing:',
        unused.missing,
        '\n dependencies:',
        unused.dependencies,
        '\n devDependencies:',
        unused.devDependencies,
      );
    }),
  );
}
 
function defineDepcheckCommand(cac: CAC) {
  cac
    .command('check-dep')
    .usage(`Analysis of project circular dependencies.`)
    .action(async () => {
      await runDepcheck();
    });
}
 
export { defineDepcheckCommand };