65 lines
2.0 KiB
JavaScript
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' }); |