mirror of
https://github.com/vbenjs/vue-vben-admin.git
synced 2025-01-23 01:30:26 +08:00
fix: window system clean script execution problems (#4513)
* fix: fix window system clean script execution problems * fix: lint error * chore: remove test code
This commit is contained in:
parent
a46c85d77d
commit
a72b8acaf9
@ -75,7 +75,7 @@ The execution command is: `pnpm run [script]` or `npm run [script]`.
|
|||||||
// Check types
|
// Check types
|
||||||
"check:type": "turbo run typecheck",
|
"check:type": "turbo run typecheck",
|
||||||
// Clean the project (delete node_modules, dist, .turbo, etc.)
|
// Clean the project (delete node_modules, dist, .turbo, etc.)
|
||||||
"clean": "vsh clean",
|
"clean": "node ./scripts/clean.mjs",
|
||||||
// Commit code
|
// Commit code
|
||||||
"commit": "czg",
|
"commit": "czg",
|
||||||
// Start the project (by default, the dev scripts of all packages in the entire repository will run)
|
// Start the project (by default, the dev scripts of all packages in the entire repository will run)
|
||||||
|
@ -42,23 +42,6 @@ Check the dependency situation of the entire project and output `unused dependen
|
|||||||
pnpm vsh check-dep
|
pnpm vsh check-dep
|
||||||
```
|
```
|
||||||
|
|
||||||
### vsh clean
|
|
||||||
|
|
||||||
Delete the project's `node_modules`, `dist`, `.turbo` directories, etc., to clean the project.
|
|
||||||
|
|
||||||
#### Usage
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pnpm vsh clean
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Options
|
|
||||||
|
|
||||||
| Option | Description |
|
|
||||||
| --- | --- |
|
|
||||||
| `-r,--recursive` | Recursively delete the entire project, default `true` |
|
|
||||||
| `--del-lock` | Whether to delete the `pnpm-lock.yaml` file, default `true` |
|
|
||||||
|
|
||||||
### vsh lint
|
### vsh lint
|
||||||
|
|
||||||
Lint checks the project to see if the code in the project conforms to standards.
|
Lint checks the project to see if the code in the project conforms to standards.
|
||||||
|
@ -75,7 +75,7 @@ npm 脚本是项目常见的配置,用于执行一些常见的任务,比如
|
|||||||
// 检查类型
|
// 检查类型
|
||||||
"check:type": "turbo run typecheck",
|
"check:type": "turbo run typecheck",
|
||||||
// 清理项目(删除node_modules、dist、.turbo)等目录
|
// 清理项目(删除node_modules、dist、.turbo)等目录
|
||||||
"clean": "vsh clean",
|
"clean": "node ./scripts/clean.mjs",
|
||||||
// 提交代码
|
// 提交代码
|
||||||
"commit": "czg",
|
"commit": "czg",
|
||||||
// 启动项目(默认会运行整个仓库所有包的dev脚本)
|
// 启动项目(默认会运行整个仓库所有包的dev脚本)
|
||||||
|
@ -42,16 +42,6 @@ pnpm vsh check-circular
|
|||||||
pnpm vsh check-dep
|
pnpm vsh check-dep
|
||||||
```
|
```
|
||||||
|
|
||||||
### vsh clean
|
|
||||||
|
|
||||||
删除项目的`node_modules`、`dist`、`.turbo`等目录,清理项目。
|
|
||||||
|
|
||||||
#### 用法
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pnpm vsh clean
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 选项
|
#### 选项
|
||||||
|
|
||||||
| 选项 | 说明 |
|
| 选项 | 说明 |
|
||||||
|
@ -143,7 +143,7 @@ const customConfig: Linter.Config[] = [
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
files: ['internal/**/**'],
|
files: ['internal/**/**', 'scripts/**/**'],
|
||||||
rules: {
|
rules: {
|
||||||
'no-console': 'off',
|
'no-console': 'off',
|
||||||
},
|
},
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
"check:cspell": "cspell lint **/*.ts **/README.md .changeset/*.md --no-progress",
|
"check:cspell": "cspell lint **/*.ts **/README.md .changeset/*.md --no-progress",
|
||||||
"check:dep": "vsh check-dep",
|
"check:dep": "vsh check-dep",
|
||||||
"check:type": "turbo run typecheck",
|
"check:type": "turbo run typecheck",
|
||||||
"clean": "vsh clean",
|
"clean": "node ./scripts/clean.mjs",
|
||||||
"commit": "czg",
|
"commit": "czg",
|
||||||
"dev": "turbo-run dev",
|
"dev": "turbo-run dev",
|
||||||
"dev:antd": "pnpm -F @vben/web-antd run dev",
|
"dev:antd": "pnpm -F @vben/web-antd run dev",
|
||||||
|
@ -30,30 +30,30 @@ describe('preferences', () => {
|
|||||||
expect(preferences).toEqual(defaultPreferences);
|
expect(preferences).toEqual(defaultPreferences);
|
||||||
});
|
});
|
||||||
|
|
||||||
// it('initializes preferences with overrides', async () => {
|
it('initializes preferences with overrides', async () => {
|
||||||
// const overrides: any = {
|
const overrides: any = {
|
||||||
// app: {
|
app: {
|
||||||
// locale: 'en-US',
|
locale: 'en-US',
|
||||||
// },
|
},
|
||||||
// };
|
};
|
||||||
// await preferenceManager.initPreferences({
|
await preferenceManager.initPreferences({
|
||||||
// namespace: 'testNamespace',
|
namespace: 'testNamespace',
|
||||||
// overrides,
|
overrides,
|
||||||
// });
|
});
|
||||||
|
|
||||||
// // 等待防抖动操作完成
|
// 等待防抖动操作完成
|
||||||
// // await new Promise((resolve) => setTimeout(resolve, 300)); // 等待100毫秒
|
// await new Promise((resolve) => setTimeout(resolve, 300)); // 等待100毫秒
|
||||||
|
|
||||||
// const expected = {
|
const expected = {
|
||||||
// ...defaultPreferences,
|
...defaultPreferences,
|
||||||
// app: {
|
app: {
|
||||||
// ...defaultPreferences.app,
|
...defaultPreferences.app,
|
||||||
// ...overrides.app,
|
...overrides.app,
|
||||||
// },
|
},
|
||||||
// };
|
};
|
||||||
|
|
||||||
// expect(preferenceManager.getPreferences()).toEqual(expected);
|
expect(preferenceManager.getPreferences()).toEqual(expected);
|
||||||
// });
|
});
|
||||||
|
|
||||||
it('updates theme mode correctly', () => {
|
it('updates theme mode correctly', () => {
|
||||||
preferenceManager.updatePreferences({
|
preferenceManager.updatePreferences({
|
||||||
|
@ -172,7 +172,7 @@ class PreferenceManager {
|
|||||||
const mergedPreference = merge(
|
const mergedPreference = merge(
|
||||||
{},
|
{},
|
||||||
// overrides,
|
// overrides,
|
||||||
this.loadCachedPreferences() || defaultPreferences,
|
this.loadCachedPreferences() || {},
|
||||||
this.initialPreferences,
|
this.initialPreferences,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
498
pnpm-lock.yaml
generated
498
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -42,7 +42,7 @@ catalog:
|
|||||||
'@types/html-minifier-terser': ^7.0.2
|
'@types/html-minifier-terser': ^7.0.2
|
||||||
'@types/jsonwebtoken': ^9.0.7
|
'@types/jsonwebtoken': ^9.0.7
|
||||||
'@types/lodash.clonedeep': ^4.5.9
|
'@types/lodash.clonedeep': ^4.5.9
|
||||||
'@types/node': ^22.7.0
|
'@types/node': ^22.7.2
|
||||||
'@types/nprogress': ^0.2.3
|
'@types/nprogress': ^0.2.3
|
||||||
'@types/postcss-import': ^14.0.3
|
'@types/postcss-import': ^14.0.3
|
||||||
'@types/qrcode': ^1.5.5
|
'@types/qrcode': ^1.5.5
|
||||||
@ -87,7 +87,7 @@ catalog:
|
|||||||
eslint-plugin-command: ^0.2.5
|
eslint-plugin-command: ^0.2.5
|
||||||
eslint-plugin-eslint-comments: ^3.2.0
|
eslint-plugin-eslint-comments: ^3.2.0
|
||||||
eslint-plugin-import-x: ^4.3.0
|
eslint-plugin-import-x: ^4.3.0
|
||||||
eslint-plugin-jsdoc: ^50.2.4
|
eslint-plugin-jsdoc: ^50.2.5
|
||||||
eslint-plugin-jsonc: ^2.16.0
|
eslint-plugin-jsonc: ^2.16.0
|
||||||
eslint-plugin-n: ^17.10.3
|
eslint-plugin-n: ^17.10.3
|
||||||
eslint-plugin-no-only-tests: ^3.3.0
|
eslint-plugin-no-only-tests: ^3.3.0
|
||||||
@ -111,9 +111,9 @@ catalog:
|
|||||||
jsonwebtoken: ^9.0.2
|
jsonwebtoken: ^9.0.2
|
||||||
lint-staged: ^15.2.10
|
lint-staged: ^15.2.10
|
||||||
lodash.clonedeep: ^4.5.0
|
lodash.clonedeep: ^4.5.0
|
||||||
lucide-vue-next: ^0.445.0
|
lucide-vue-next: ^0.446.0
|
||||||
medium-zoom: ^1.1.0
|
medium-zoom: ^1.1.0
|
||||||
naive-ui: ^2.39.0
|
naive-ui: ^2.40.0
|
||||||
nanoid: ^5.0.7
|
nanoid: ^5.0.7
|
||||||
nitropack: ^2.9.7
|
nitropack: ^2.9.7
|
||||||
nprogress: ^0.2.0
|
nprogress: ^0.2.0
|
||||||
@ -157,7 +157,7 @@ catalog:
|
|||||||
unbuild: ^2.0.0
|
unbuild: ^2.0.0
|
||||||
unplugin-element-plus: ^0.8.0
|
unplugin-element-plus: ^0.8.0
|
||||||
vee-validate: ^4.13.2
|
vee-validate: ^4.13.2
|
||||||
vite: ^5.4.7
|
vite: ^5.4.8
|
||||||
vite-plugin-compression: ^0.5.1
|
vite-plugin-compression: ^0.5.1
|
||||||
vite-plugin-dts: 4.2.1
|
vite-plugin-dts: 4.2.1
|
||||||
vite-plugin-html: ^3.2.2
|
vite-plugin-html: ^3.2.2
|
||||||
@ -172,6 +172,6 @@ catalog:
|
|||||||
vue-i18n: ^10.0.3
|
vue-i18n: ^10.0.3
|
||||||
vue-router: ^4.4.5
|
vue-router: ^4.4.5
|
||||||
vue-tsc: ^2.1.6
|
vue-tsc: ^2.1.6
|
||||||
watermark-js-plus: ^1.5.6
|
watermark-js-plus: ^1.5.7
|
||||||
zod: ^3.23.8
|
zod: ^3.23.8
|
||||||
zod-defaults: ^0.1.3
|
zod-defaults: ^0.1.3
|
||||||
|
53
scripts/clean.mjs
Normal file
53
scripts/clean.mjs
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
import { promises as fs } from 'node:fs';
|
||||||
|
import { join } from 'node:path';
|
||||||
|
|
||||||
|
const rootDir = process.cwd();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 递归查找并删除目标目录
|
||||||
|
* @param {string} currentDir - 当前遍历的目录路径
|
||||||
|
*/
|
||||||
|
async function cleanTargetsRecursively(currentDir, targets) {
|
||||||
|
const items = await fs.readdir(currentDir);
|
||||||
|
|
||||||
|
for (const item of items) {
|
||||||
|
try {
|
||||||
|
const itemPath = join(currentDir, item);
|
||||||
|
if (targets.includes(item)) {
|
||||||
|
// 匹配到目标目录或文件时直接删除
|
||||||
|
await fs.rm(itemPath, { force: true, recursive: true });
|
||||||
|
console.log(`Deleted: ${itemPath}`);
|
||||||
|
}
|
||||||
|
const stat = await fs.lstat(itemPath);
|
||||||
|
if (stat.isDirectory()) {
|
||||||
|
await cleanTargetsRecursively(itemPath, targets);
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
// console.error(
|
||||||
|
// `Error handling item ${item} in ${currentDir}: ${error.message}`,
|
||||||
|
// );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(async function startCleanup() {
|
||||||
|
// 要删除的目录及文件名称
|
||||||
|
const targets = ['node_modules', 'dist', '.turbo', 'dist.zip'];
|
||||||
|
|
||||||
|
const deleteLockFile = process.argv.includes('--del-lock');
|
||||||
|
const cleanupTargets = [...targets];
|
||||||
|
if (deleteLockFile) {
|
||||||
|
cleanupTargets.push('pnpm-lock.yaml');
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
`Starting cleanup of targets: ${cleanupTargets.join(', ')} from root: ${rootDir}`,
|
||||||
|
);
|
||||||
|
|
||||||
|
try {
|
||||||
|
await cleanTargetsRecursively(rootDir, cleanupTargets);
|
||||||
|
console.log('Cleanup process completed.');
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Unexpected error during cleanup: ${error.message}`);
|
||||||
|
}
|
||||||
|
})();
|
@ -1,88 +0,0 @@
|
|||||||
import type { CAC } from 'cac';
|
|
||||||
|
|
||||||
import { join } from 'node:path';
|
|
||||||
|
|
||||||
import { colors, getPackages, rimraf, spinner } from '@vben/node-utils';
|
|
||||||
|
|
||||||
const CLEAN_DIRS = ['dist', 'node_modules', '.turbo'];
|
|
||||||
|
|
||||||
interface CleanCommandOptions {
|
|
||||||
/**
|
|
||||||
* Whether to delete the project pnpm-lock.yaml file.
|
|
||||||
* @default true
|
|
||||||
*/
|
|
||||||
delLock?: boolean;
|
|
||||||
/**
|
|
||||||
* Files that need to be cleared.
|
|
||||||
*/
|
|
||||||
dirs?: string[];
|
|
||||||
/**
|
|
||||||
* recursive clear.
|
|
||||||
* @default true
|
|
||||||
*/
|
|
||||||
recursive?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function runClean({
|
|
||||||
delLock = false,
|
|
||||||
dirs = [],
|
|
||||||
recursive,
|
|
||||||
}: CleanCommandOptions) {
|
|
||||||
const cleanDirs = dirs.length === 0 ? CLEAN_DIRS : dirs;
|
|
||||||
|
|
||||||
const cleanDirsText = JSON.stringify(cleanDirs);
|
|
||||||
|
|
||||||
spinner(
|
|
||||||
{
|
|
||||||
successText: colors.green(`clean up all \`${cleanDirsText}\` success.`),
|
|
||||||
title: `${colors.dim(cleanDirsText)} cleaning in progress...`,
|
|
||||||
},
|
|
||||||
async () => {
|
|
||||||
await clean({ delLock, dirs: cleanDirs, recursive });
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function clean({ delLock, dirs = [], recursive }: CleanCommandOptions) {
|
|
||||||
const { packages, rootDir } = await getPackages();
|
|
||||||
|
|
||||||
// Delete the project pnpm-lock.yaml file
|
|
||||||
if (delLock) {
|
|
||||||
await rimraf(join(rootDir, 'pnpm-lock.yaml'));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Recursively delete the specified folders under all package directories
|
|
||||||
if (recursive) {
|
|
||||||
await Promise.all(
|
|
||||||
packages.map((pkg) => {
|
|
||||||
const pkgRoot = dirs.map((dir) => join(pkg.dir, dir));
|
|
||||||
return rimraf(pkgRoot, { preserveRoot: true });
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only delete the specified folders in the root directory
|
|
||||||
await Promise.all(
|
|
||||||
dirs.map((dir) => rimraf(join(process.cwd(), dir), { preserveRoot: true })),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function defineCleanCommand(cac: CAC) {
|
|
||||||
cac
|
|
||||||
.command('clean [dirs...]')
|
|
||||||
.usage(
|
|
||||||
`Delete all ['dist', 'node_modules', '.turbo'] directories under the project.`,
|
|
||||||
)
|
|
||||||
.option('-r,--recursive', 'Recursively clean all packages in a monorepo.', {
|
|
||||||
default: true,
|
|
||||||
})
|
|
||||||
.option('--del-lock', 'Delete the project pnpm-lock.yaml file.', {
|
|
||||||
default: true,
|
|
||||||
})
|
|
||||||
.action(
|
|
||||||
async (dirs, { delLock, recursive }) =>
|
|
||||||
await runClean({ delLock, dirs, recursive }),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export { defineCleanCommand };
|
|
@ -4,7 +4,6 @@ import { cac } from 'cac';
|
|||||||
|
|
||||||
import { defineCheckCircularCommand } from './check-circular';
|
import { defineCheckCircularCommand } from './check-circular';
|
||||||
import { defineDepcheckCommand } from './check-dep';
|
import { defineDepcheckCommand } from './check-dep';
|
||||||
import { defineCleanCommand } from './clean';
|
|
||||||
import { defineCodeWorkspaceCommand } from './code-workspace';
|
import { defineCodeWorkspaceCommand } from './code-workspace';
|
||||||
import { defineLintCommand } from './lint';
|
import { defineLintCommand } from './lint';
|
||||||
import { definePubLintCommand } from './publint';
|
import { definePubLintCommand } from './publint';
|
||||||
@ -18,9 +17,6 @@ try {
|
|||||||
// vsh publint
|
// vsh publint
|
||||||
definePubLintCommand(vsh);
|
definePubLintCommand(vsh);
|
||||||
|
|
||||||
// vsh clean
|
|
||||||
defineCleanCommand(vsh);
|
|
||||||
|
|
||||||
// vsh code-workspace
|
// vsh code-workspace
|
||||||
defineCodeWorkspaceCommand(vsh);
|
defineCodeWorkspaceCommand(vsh);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user