前端一键自动化打包部署

801 阅读1分钟

安装依赖

npm i shelljs -D
npm i ssh2-sftp-client -D

Shelljs是Node.js下的脚本语言解析器,具有丰富且强大的底层操作(Windows/Linux/OS X)权限。Shelljs本质就是基于node的一层命令封装插件,让前端开发者可以不依赖linux也不依赖类似于cmder的转换工具,而是直接在我们最熟悉不过的javascript代码中编写shell命令实现功能。

ssh2-sftp-client是node.js 的 SFTP 客户端,一个围绕SSH2的包装器,它提供了一个高级的便利抽象以及一个基于 Promise 的 API。

执行文件 upload/index.js

const config = require('./config.js')
const shell = require('shelljs')
const path = require('path')
const Client = require('ssh2-sftp-client')
// 打包 npm run build
const compileDist = async() => {
  if (shell.exec(`npm run build:prod`).code === 0) {
    console.log('打包成功')
  }
}

async function connectSSh() {
  const sftp = new Client()
  sftp.connect({
    host: config.ip, // 服务器 IP
    port: config.port,
    username: config.username,
    password: config.password
  }).then(() => {
    console.log('先执行删除服务器文件')
    return sftp.rmdir(config.rmpath, true)
  }).then(() => {
    // 上传文件
    console.log('开始上传')
    return sftp.uploadDir(path.resolve(__dirname, '../dist'), config.path)
  }).then((data) => {
    console.log('上传完成')
  }).catch((err) => {
    console.log(err, '失败')
  }).finally(() => {
    sftp.end()
  })
}
async function runTask() {
  await compileDist() // 打包完成
  await connectSSh() // 提交上传
}
runTask()

配置package.json

"upload": "node upload/index.js"