Files
CN_Tool_client/build/rename-output.js
2026-04-13 17:32:58 +08:00

74 lines
2.2 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const fs = require('fs')
const path = require('path')
const oldPath = path.resolve(__dirname, '..', 'out', 'win-unpacked')
const newPath = path.resolve(__dirname, '..', 'out', 'CN_Tool')
const retryableErrorCodes = new Set(['EPERM', 'EBUSY', 'ENOTEMPTY', 'UNKNOWN'])
const maxAttempts = 10
const retryDelayMs = 1500
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms))
}
function isRetryable(error) {
return retryableErrorCodes.has(error?.code)
}
async function removeIfExists(targetPath) {
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
if (!fs.existsSync(targetPath)) {
return
}
try {
fs.rmSync(targetPath, { recursive: true, force: true })
return
} catch (error) {
if (!isRetryable(error) || attempt === maxAttempts) {
throw error
}
console.warn(
`[rename-output] 目标目录正在被占用,${retryDelayMs}ms 后重试删除(${attempt}/${maxAttempts}${targetPath}`
)
await sleep(retryDelayMs)
}
}
}
async function renameWithRetry(sourcePath, targetPath) {
// Windows 打包完成后,杀软、索引或资源管理器可能短暂占用目录,重试可避免误判为打包失败。
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
try {
fs.renameSync(sourcePath, targetPath)
console.log('[rename-output] Renamed to CN_Tool')
return
} catch (error) {
if (!isRetryable(error) || attempt === maxAttempts) {
throw error
}
console.warn(
`[rename-output] 输出目录暂时无法重命名,${retryDelayMs}ms 后重试(${attempt}/${maxAttempts}${error.code}`
)
await sleep(retryDelayMs)
}
}
}
async function main() {
if (!fs.existsSync(oldPath)) {
console.warn(`[rename-output] 未找到输出目录,跳过重命名:${oldPath}`)
return
}
await removeIfExists(newPath)
await renameWithRetry(oldPath, newPath)
}
main().catch((error) => {
console.error(`[rename-output] 重命名失败:${error.message}`)
process.exitCode = 1
})