fix: window system clean script execution problems (#4513)
* fix: fix window system clean script execution problems * fix: lint error * chore: remove test codepull/48/MERGE
							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
								
								
								
								
							
							
						
						
									
										498
									
								
								pnpm-lock.yaml
								
								
								
								
							
										
											
												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 | ||||||
|  |  | ||||||
|  | @ -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
	
	 vince
						vince