f
Some checks failed
CI / Test (ubuntu-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Lint (ubuntu-latest) (push) Has been cancelled
CI / Lint (windows-latest) (push) Has been cancelled
CI / Check (ubuntu-latest) (push) Has been cancelled
CI / Check (windows-latest) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
Deploy Website on push / Deploy Push Playground Ftp (push) Has been cancelled
Deploy Website on push / Deploy Push Docs Ftp (push) Has been cancelled
Deploy Website on push / Deploy Push Antd Ftp (push) Has been cancelled
Deploy Website on push / Deploy Push Element Ftp (push) Has been cancelled
Deploy Website on push / Deploy Push Naive Ftp (push) Has been cancelled
Release Drafter / update_release_draft (push) Has been cancelled
CI / CI OK (push) Has been cancelled
Deploy Website on push / Rerun on failure (push) Has been cancelled
Lock Threads / action (push) Has been cancelled
Issue Close Require / close-issues (push) Has been cancelled
Close stale issues / stale (push) Has been cancelled

This commit is contained in:
2025-11-27 19:08:41 +08:00
commit 0668eea99b
1450 changed files with 125078 additions and 0 deletions

View File

@@ -0,0 +1,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 };