library-picturebook-activity/lesingle-creation-frontend/scripts/compress.cjs
En 98e9ad1d28 feat(前端): 测试环境登录框支持自动填充测试账号
通过 VITE_AUTO_FILL_TEST 环境变量控制,在 .env.test 中启用,
使测试环境构建后登录框也能自动填充测试账号,方便测试人员使用。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 17:03:22 +08:00

117 lines
3.9 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 { execSync } = require("child_process")
const path = require("path")
const fs = require("fs")
/**
* 压缩前端打包文件
* 压缩包放在根目录下,文件名格式: competition-web-{env}-v{version}.tgz
*
* 用法:
* node scripts/compress.cjs test - 测试环境
* node scripts/compress.cjs production - 生产环境
*/
function compressFrontend() {
const rootDir = path.join(__dirname, "..")
const sourceDir = path.join(rootDir, "dist")
const outputDir = rootDir
// 获取环境参数
const env = process.argv[2]
if (!env || !["test", "production"].includes(env)) {
console.error("❌ 错误: 请指定环境参数")
console.error(" 用法: node scripts/compress.cjs <test|production>")
console.error(" 示例: node scripts/compress.cjs test")
console.error(" 示例: node scripts/compress.cjs production")
process.exit(1)
}
// 从 package.json 读取版本号
const packageJsonPath = path.join(rootDir, "package.json")
let version = "1.0.0"
try {
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"))
version = packageJson.version || "1.0.0"
} catch (error) {
console.warn(`⚠️ 无法读取 package.json 版本号,使用默认版本: ${version}`)
}
// 检查源目录是否存在
if (!fs.existsSync(sourceDir)) {
console.error("❌ 错误: 前端打包文件不存在")
console.error(` 路径: ${sourceDir}`)
console.error(
` 请先运行 pnpm build:${env === "test" ? "test" : ""} 构建前端项目`,
)
process.exit(1)
}
// 删除之前的所有压缩包
console.log("🧹 清理旧的压缩包...\n")
try {
const files = fs.readdirSync(outputDir)
const oldZipFiles = files.filter(
(file) => file.startsWith("competition-web-") && file.endsWith(".tgz"),
)
if (oldZipFiles.length > 0) {
oldZipFiles.forEach((file) => {
const filePath = path.join(outputDir, file)
try {
fs.unlinkSync(filePath)
console.log(` ✅ 已删除: ${file}`)
} catch (error) {
console.warn(` ⚠️ 删除失败: ${file} - ${error.message}`)
}
})
console.log("")
} else {
console.log(" 没有找到旧的压缩包\n")
}
} catch (error) {
console.warn(` ⚠️ 清理旧压缩包时出错: ${error.message}\n`)
}
// 生成文件名: competition-web-{env}-v{version}.tgz
const zipFileName = `competition-web-${env}-v${version}.tgz`
const zipFilePath = path.join(outputDir, zipFileName)
console.log("📦 开始压缩前端打包文件...\n")
console.log(` 环境: ${env}`)
console.log(` 版本: v${version}`)
console.log(` 源目录: ${sourceDir}`)
console.log(` 输出文件: ${zipFilePath}\n`)
try {
// 使用相对路径,避免 Windows tar 路径问题
const tarCommand = `tar -czf "${zipFileName}" -C dist .`
execSync(tarCommand, {
cwd: rootDir,
stdio: "inherit",
shell: true,
env: { ...process.env },
})
// 检查文件是否创建成功
if (fs.existsSync(zipFilePath)) {
const stats = fs.statSync(zipFilePath)
const fileSizeMB = (stats.size / (1024 * 1024)).toFixed(2)
console.log(`\n✅ 压缩完成!`)
console.log(` 文件: ${zipFileName}`)
console.log(` 大小: ${fileSizeMB} MB`)
console.log(` 路径: ${zipFilePath}`)
} else {
throw new Error("压缩文件未生成")
}
} catch (error) {
console.error("\n❌ 压缩失败:", error.message)
console.error("\n提示:")
console.error(" 1. 确保已安装tar命令 (Windows 10+内置支持)")
console.error(" 2. 确保有足够的磁盘空间")
console.error(" 3. 确保输出目录有写入权限")
process.exit(1)
}
}
compressFrontend()