import fs from "fs-extra"; import archiver from "archiver"; import { Client } from "ssh2"; import ora from "ora"; // 配置SSH连接信息 const sshConfig = { host: "139.224.213.131", port: 22, username: "root", password: "tTkSkcbrTfmFOE4K", }; const spinner = ora(); // 要打包的文件目录列表 const fileDirectoryList = ["dist", "prisma", "admin", "public", "web"]; // 服务器上的目标解压目录 const remoteDirectory = "/www/wwwroot/Medicine-Server"; const fileName = "uploadRes.zip"; async function upload() { // 连接ssh const conn = new Client(); conn .on("ready", () => { spinner.start("开始上传文件"); conn.sftp((err, sftp) => { if (err) throw err; sftp.fastPut(fileName, `${remoteDirectory}/${fileName}`, (err) => { if (err) throw err; spinner.succeed("上传文件完成"); conn.exec(`cd ${remoteDirectory} && unzip -o ${fileName} -d ${remoteDirectory}`, (err, stream) => { if (err) throw err; stream.on("close", (code, signal) => { spinner.succeed("解压文件完成"); conn.end(); }); stream.on("data", (data) => { console.log(data.toString()); }); }); }); }); conn.on("close", (err) => { // fs.removeSync(fileName); // spinner.succeed("删除本地文件"); spinner.succeed("断开连接"); }); }) .connect(sshConfig); } async function main() { fs.removeSync(fileName); spinner.start("开始打包文件"); const zipFile = archiver("zip", { zlib: { level: 9 } }); fileDirectoryList.forEach(async (dir) => { await zipFile.directory(dir, true); }); const output = fs.createWriteStream(fileName); // 压缩包写入文件 await zipFile.pipe(output); await zipFile.finalize(); spinner.succeed("打包文件完成"); await upload(); } main();