前端使用 scp2 自动部署到服务器

思路

1,自动打包
2,通过ssh2 删除之前的文件
3,通过scp2 连接服务器替换文件

步骤

1, npm 依赖下载

npm i scp2
npm i ora@3.4.0 // 推荐下载@3.4.0 版本 因为可以使用require 引入
npm i ssh2
npm i readline

2, 在package.json 中 scripts添加

"deploy": "npm run build:product && node ./deploy.js"

3,在根目录新建deploy.js

const scpClient = require('scp2')
const ora = require('ora')
const loading = ora('正在部署中');
const Client = require('ssh2').Client;
const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})
const questions = [ 'Please input server username: ', 'Please input server password: ']
const linelimit = 2
let inputArr = []
let index = 0
let server = {}

// 依次执行命令行交互语句
function runQueLoop() {
    if (index === linelimit) {
        server["username"] = inputArr[0]
        server["password"] = inputArr[1]
        deployFile()
        return
    }
    rl.question(questions[index], as => {
        inputArr[index] = as
        index++
        runQueLoop()
    })
}
function deployFile() {
    const service = {
        host: 'xxx',//服务器IP
        port: 22,//服务器端口
        username:server.username,//服务器ssh登录用户名
        password: server.password,//服务器ssh登录密码
        path: '/www/wwwroot/8098'//服务器web目录
    }
    var conn = new Client();
    conn.on('ready', function () {
        // 删除上个版本的文件
        conn.exec('rm -rf /home/ruoyi/nginx/html/ruoyi-ui/*', function (err, stream) {
            if (err) throw err;
            stream.on('close', function (code, signal) {
                loading.start();
                scpClient.scp(
                    './dist', service,
                    function (err) {
                        loading.stop();
                        if (err) {
                            console.log('发布失败!');
                            throw err;
                        } else {
                            console.log('成功发布!');
                        }
                    }
                );
                conn.end();
            }).on('data', function (data) {
                console.log('STDOUT: ' + data);
            }).stderr.on('data', function (data) {
                console.log('STDERR: ' + data);
            });
        });
    }).connect(service);
}
runQueLoop()


最后在控制台执行 npm run deploy 命令 就可以了
在这里插入图片描述
在这里插入图片描述

你可能感兴趣的:(前端,服务器,javascript)