import fetch from "node-fetch"; import fs from "fs"; import path from "path"; import unzipper from "unzipper"; import { pipeline } from "node:stream"; import { promisify } from "node:util"; import { createReadStream, createWriteStream } from "node:fs"; const streamPipeline = promisify(pipeline); /** * 下载并解压离线包 * @param {string} url 下载地址 * @param {string} destDir 解压目标目录 */ async function downloadAndExtract(url, destDir) { const zipPath = path.join(destDir, "temp.zip"); console.log(`开始下载语言包: ${url}`); const res = await fetch(url, { method: "GET", headers: { //'X-API-Key':'tgpak_gm2f6ntnor2gy4ztnfuw65twoj2wu2tdovzwwztqoe4ts5q' }, }); if (!res.ok) { throw new Error(`下载语言包失败: ${res.status} ${res.statusText}`); } // zip文件保存到本地目录 await streamPipeline(res.body, createWriteStream(zipPath)); console.log("语言包下载完成,开始解压..."); // 解压到指定目录 await streamPipeline( createReadStream(zipPath), unzipper.Extract({ path: destDir }) ); console.log("语言包解压完成!"); // 删除临时压缩包 fs.unlinkSync(zipPath); } // 示例调用 const url = "http://192.168.0.211:9012/v2/projects/export?ak=tgpak_gqyv6y3ngbrtg2dtg5xw65llnazxim3bgnxwwodvmizhcny"; const dest = "./src/lang/locales"; await downloadAndExtract(url, dest);