#!/usr/bin/env node /** * 强制删除项目下的 dist 目录(含长路径/占用时多轮重试) */ const fs = require('fs') const path = require('path') const { execSync } = require('child_process') const projectRoot = path.resolve(__dirname, '..') const distPath = path.join(projectRoot, 'dist') const maxRetries = 5 const retryDelayMs = 1500 function sleep(ms) { return new Promise((r) => setTimeout(r, ms)) } function deleteWithNode() { try { fs.rmSync(distPath, { recursive: true, force: true, maxRetries: 3 }) return true } catch (e) { return false } } function deleteWithLongPath() { if (process.platform !== 'win32') return false try { const longPath = '\\\\?\\' + path.resolve(projectRoot, 'dist').replace(/\//g, '\\') fs.rmSync(longPath, { recursive: true, force: true, maxRetries: 3 }) return true } catch (e) { return false } } function deleteWithCmd() { try { execSync('rmdir /s /q dist', { cwd: projectRoot, stdio: 'pipe', windowsHide: true }) return true } catch (e) { return false } } async function main() { if (!fs.existsSync(distPath)) { console.log('dist 不存在,无需删除。') process.exit(0) } console.log('正在强制删除 dist...') for (let i = 0; i < maxRetries; i++) { if (deleteWithNode()) { console.log('已删除 dist(Node)。') process.exit(0) } if (process.platform === 'win32' && deleteWithLongPath()) { console.log('已删除 dist(长路径)。') process.exit(0) } if (deleteWithCmd()) { console.log('已删除 dist(cmd rmdir)。') process.exit(0) } if (i < maxRetries - 1) { console.log(`第 ${i + 1} 次未完全删除,${retryDelayMs / 1000} 秒后重试...`) await sleep(retryDelayMs) } } console.error('无法删除 dist,请关闭占用该目录的程序(如 Explorer、本应用)后重试,或手动删除。') process.exit(1) } main()