Browse Source

fix: window system clean script execution problems (#4513)

* fix: fix window system clean script execution problems

* fix: lint error

* chore: remove test code
vince 6 months ago
parent
commit
a72b8acaf9

+ 1 - 1
docs/src/en/guide/essentials/development.md

@@ -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)

+ 0 - 17
docs/src/en/guide/project/cli.md

@@ -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.

+ 1 - 1
docs/src/guide/essentials/development.md

@@ -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脚本)

+ 0 - 10
docs/src/guide/project/cli.md

@@ -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
-```
-
 #### 选项
 #### 选项
 
 
 | 选项             | 说明                                    |
 | 选项             | 说明                                    |

+ 1 - 1
internal/lint-configs/eslint-config/src/custom-config.ts

@@ -143,7 +143,7 @@ const customConfig: Linter.Config[] = [
     },
     },
   },
   },
   {
   {
-    files: ['internal/**/**'],
+    files: ['internal/**/**', 'scripts/**/**'],
     rules: {
     rules: {
       'no-console': 'off',
       'no-console': 'off',
     },
     },

+ 1 - 1
package.json

@@ -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",

+ 24 - 24
packages/@core/preferences/__tests__/preferences.test.ts

@@ -30,30 +30,30 @@ describe('preferences', () => {
     expect(preferences).toEqual(defaultPreferences);
     expect(preferences).toEqual(defaultPreferences);
   });
   });
 
 
-  // it('initializes preferences with overrides', async () => {
-  //   const overrides: any = {
-  //     app: {
-  //       locale: 'en-US',
-  //     },
-  //   };
-  //   await preferenceManager.initPreferences({
-  //     namespace: 'testNamespace',
-  //     overrides,
-  //   });
-
-  //   // 等待防抖动操作完成
-  //   // await new Promise((resolve) => setTimeout(resolve, 300)); // 等待100毫秒
-
-  //   const expected = {
-  //     ...defaultPreferences,
-  //     app: {
-  //       ...defaultPreferences.app,
-  //       ...overrides.app,
-  //     },
-  //   };
-
-  //   expect(preferenceManager.getPreferences()).toEqual(expected);
-  // });
+  it('initializes preferences with overrides', async () => {
+    const overrides: any = {
+      app: {
+        locale: 'en-US',
+      },
+    };
+    await preferenceManager.initPreferences({
+      namespace: 'testNamespace',
+      overrides,
+    });
+
+    // 等待防抖动操作完成
+    // await new Promise((resolve) => setTimeout(resolve, 300)); // 等待100毫秒
+
+    const expected = {
+      ...defaultPreferences,
+      app: {
+        ...defaultPreferences.app,
+        ...overrides.app,
+      },
+    };
+
+    expect(preferenceManager.getPreferences()).toEqual(expected);
+  });
 
 
   it('updates theme mode correctly', () => {
   it('updates theme mode correctly', () => {
     preferenceManager.updatePreferences({
     preferenceManager.updatePreferences({

+ 1 - 1
packages/@core/preferences/src/preferences.ts

@@ -172,7 +172,7 @@ class PreferenceManager {
     const mergedPreference = merge(
     const mergedPreference = merge(
       {},
       {},
       // overrides,
       // overrides,
-      this.loadCachedPreferences() || defaultPreferences,
+      this.loadCachedPreferences() || {},
       this.initialPreferences,
       this.initialPreferences,
     );
     );
 
 

File diff suppressed because it is too large
+ 182 - 186
pnpm-lock.yaml


+ 6 - 6
pnpm-workspace.yaml

@@ -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 - 0
scripts/clean.mjs

@@ -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}`);
+  }
+})();

+ 0 - 88
scripts/vsh/src/clean/index.ts

@@ -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 };

+ 0 - 4
scripts/vsh/src/index.ts

@@ -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);
 
 

Some files were not shown because too many files changed in this diff