Files
huishou/upload-final.js
2026-07-27 14:07:26 +08:00

65 lines
2.0 KiB
JavaScript

const { Client } = require('ssh2');
const fs = require('fs');
const path = require('path');
const conn = new Client();
const localDir = path.join(__dirname, 'dist', 'build', 'h5');
const remoteDir = '/www/huishou/dist/build/h5';
conn.on('ready', () => {
console.log('=== 强制清理并重新上传 ===');
conn.exec(`rm -rf ${remoteDir} && mkdir -p ${remoteDir}`, (err) => {
if (err) { console.log('清理失败:', err); conn.end(); return; }
const uploadFile = (local, remote) => {
return new Promise((resolve, reject) => {
fs.readFile(local, (err, content) => {
if (err) { reject(err); return; }
conn.sftp((err2, sftp) => {
if (err2) { reject(err2); return; }
const ws = sftp.createWriteStream(remote);
ws.on('close', () => {
sftp.end();
resolve();
});
ws.on('error', (e) => {
sftp.end();
reject(e);
});
ws.end(content);
});
});
});
};
const uploadDir = async (local, remote) => {
const entries = fs.readdirSync(local, { withFileTypes: true });
for (const entry of entries) {
const lp = path.join(local, entry.name);
const rp = remote + '/' + entry.name;
if (entry.isDirectory()) {
await new Promise((resolve) => {
conn.exec(`mkdir -p ${rp}`, () => resolve());
});
await uploadDir(lp, rp);
} else {
await uploadFile(lp, rp);
console.log('上传:', rp);
}
}
};
uploadDir(localDir, remoteDir).then(() => {
console.log('上传完成');
conn.exec('/www/server/nginx/sbin/nginx -s reload', () => {
console.log('Nginx已重启');
conn.end();
});
}).catch((err) => {
console.log('上传失败:', err);
conn.end();
});
});
});
conn.connect({ host: '101.200.232.171', port: 22, username: 'root', password: 'Torch1112' });