| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #!/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()
|