1.安装ssh2-sftp-client模块
//代码如下
const Client = require('ssh2-sftp-client')
const path = require('path')
const fs = require('fs')
const sftp = new Client()
const config192 = {
host: '',
port: 22,
username: "",
password: ""
}
async function main(parentRoot) {
const dir = path.join(parentRoot, 'dist') //本地文件夹
const remote = '' //远程路径
try {
await sftp.connect(config192)
await download(remote)
await deleteDir(remote)
await uploadDir(remote, dir)
} catch (error) {
}
}
//文件夹上传
async function uploadDir(remote, dir) {
return new Promise((resolve, reject) => {
console.log('开始上传');
sftp.uploadDir(dir, remote)
.then(res => {
sftp.end();
console.log(res + '上传结束');
resolve(res)
})
.catch(err => {
sftp.end();
console.log(err);
reject(err)
})
})
}
//下载备份
async function download(remote) {
const filename = `${remote.split('/').pop()}-${getDateName()}`
const dir = `E:/backups/${filename}` //本地备份路径
fs.mkdirSync(dir)
console.log('开始下载');
return new Promise((resolve, reject) => {
sftp.downloadDir(remote, dir)
.then(res => {
console.log('下载结束');
console.log(res + '下载结束');
resolve(res)
})
.catch(err => {
sftp.end();
console.log(err);
reject(err)
})
})
}
//删除远程文件夹
async function deleteDir(remote) {
return new Promise((resolve, reject) => {
console.log('开始删除');
if (!sftp.exists(remote)) {
reject({ message: 'not found Dir' })
}
sftp.rmdir(remote, true)
.then(res => {
console.log(res + '删除结束');
resolve(res)
})
.catch(err => {
sftp.end();
console.log(err);
reject(err)
})
})
}
//设置文件夹名称
function getDateName() {
const date = new Date();
return `${date.getFullYear()}-${(date.getMonth() + 1)
.toString()
.padStart(2, "0")}${date.getDate()} ${date
.getHours()
.toString()
.padStart(2, "0")}:${date.getMinutes().toString().padStart(2, "0")}:${date
.getSeconds()
.toString()
.padStart(2, "0")}`;
}
module.exports = {
main,
}
最后在package.json文件中 scripts 标签添加 "build:upload": "vite build && node xxx.js",