chore: 优化Husky提交钩子
This commit is contained in:
parent
de67da816c
commit
976aad9ee7
@ -1 +1 @@
|
||||
pnpm run verify:commit
|
||||
node internal/commit/husky-fast-check.mjs
|
||||
|
||||
86
internal/commit/husky-fast-check.mjs
Normal file
86
internal/commit/husky-fast-check.mjs
Normal file
@ -0,0 +1,86 @@
|
||||
import { spawnSync } from 'node:child_process';
|
||||
import { existsSync } from 'node:fs';
|
||||
import { extname } from 'node:path';
|
||||
|
||||
const CHECK_EXTENSIONS = new Set([
|
||||
'.cjs',
|
||||
'.js',
|
||||
'.jsx',
|
||||
'.mjs',
|
||||
'.ts',
|
||||
'.tsx',
|
||||
'.vue',
|
||||
]);
|
||||
const CHECK_ROOTS = ['apps/web-antdv-next/', 'internal/'];
|
||||
|
||||
function run(command, args) {
|
||||
const result = spawnSync(command, args, {
|
||||
shell: process.platform === 'win32' && command === 'pnpm',
|
||||
stdio: 'inherit',
|
||||
});
|
||||
|
||||
if (result.error) {
|
||||
console.error(result.error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (result.status !== 0) {
|
||||
process.exit(result.status ?? 1);
|
||||
}
|
||||
}
|
||||
|
||||
function output(command, args) {
|
||||
const result = spawnSync(command, args, {
|
||||
encoding: 'utf8',
|
||||
shell: false,
|
||||
});
|
||||
|
||||
if (result.error) {
|
||||
console.error(result.error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (result.status !== 0) {
|
||||
process.exit(result.status ?? 1);
|
||||
}
|
||||
|
||||
return result.stdout;
|
||||
}
|
||||
|
||||
function getPnpmCommand() {
|
||||
return 'pnpm';
|
||||
}
|
||||
|
||||
function getStagedFiles() {
|
||||
return output('git', [
|
||||
'diff',
|
||||
'--cached',
|
||||
'--name-only',
|
||||
'--diff-filter=ACMR',
|
||||
'-z',
|
||||
])
|
||||
.split('\0')
|
||||
.map((file) => file.replaceAll('\\', '/'))
|
||||
.filter(Boolean);
|
||||
}
|
||||
|
||||
const files = getStagedFiles().filter((file) => {
|
||||
if (!existsSync(file)) return false;
|
||||
if (!CHECK_ROOTS.some((root) => file.startsWith(root))) return false;
|
||||
|
||||
return CHECK_EXTENSIONS.has(extname(file));
|
||||
});
|
||||
|
||||
if (files.length === 0) {
|
||||
console.info('[husky] no staged files need eslint.');
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
run(getPnpmCommand(), [
|
||||
'exec',
|
||||
'eslint',
|
||||
'--cache',
|
||||
'--cache-location',
|
||||
'node_modules/.cache/husky-eslint/',
|
||||
...files,
|
||||
]);
|
||||
@ -21,6 +21,7 @@
|
||||
"preinstall": "npx only-allow pnpm",
|
||||
"preview": "pnpm -F @vben/web-antdv-next run preview",
|
||||
"reinstall": "pnpm run clean && rimraf pnpm-lock.yaml && pnpm install",
|
||||
"verify:staged": "node internal/commit/husky-fast-check.mjs",
|
||||
"verify:commit": "pnpm run lint:commit && pnpm -F @vben/web-antdv-next run typecheck",
|
||||
"test:e2e": "turbo run test:e2e"
|
||||
},
|
||||
|
||||
Loading…
Reference in New Issue
Block a user