nodejs sftp自动化部署

129 阅读1分钟

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",