vue项目打包自动化部署上传到sftp服务器

vue-cli项目根目录新建run_bulid.js文件

安装依赖

npm i compressing ssh2 --save-dev

run_bulid.js



const {exec} = require('child_process');
const compressing = require('compressing');
const Client = require('ssh2').Client;

// 服务器文件地址
const server_url="/usr/local/nginx/html/";

//服务器列表
const server=[
    {
        nm:"服务器1",//服务器名称(自定义)
        sv:{
            host: '', // 服务器地址
            port: '', // 端口号
            username: '', // 用户名
            password: '' // 密码
        },
    }
    ,
    {
        nm:"服务器2",//服务器名称(自定义)
        sv: {
            host: '', // 服务器地址
            port: '', // 端口号
            username: '', // 用户名
            password: '' // 密码
        },
    }
]
let server_key=0;


function conn() {   // 连接服务器
    var connect = new Client()
    var name=server[server_key].nm
    console.log('========连接服务器'+name+'========')
    connect.on('ready', () => {
        console.log('========连接'+name+'成功========')
        upload(name,connect)
    }).on('error', (err) => {
        console.error(err)
        console.log('========连接'+ name +'出错========')
    }).on('end', () => {
        console.log('========连接'+ name +'关闭========')
        if(server[server_key+1]&&name){
            server_key++;
            conn()
        }
    }).on('close', (err) => {
        if (err) {
            console.log('========连接'+name+'出错========')
        }
    }).connect(server[server_key].sv)
}

function upload(name,connect) { // 上传
    console.log('========'+name+'开始上传========')
    connect.sftp((err, sftp) => {
        if (err) throw err
        // 第一个参数为要上传的文件名, 第二个参数为服务器目录
        sftp.fastPut('dist.zip', server_url+"dist.zip", (err, res) => { 
            if (err) {
                console.log(err)
                console.error('========'+name+'上传失败========')
                connect.end()
                return
            }
            console.log('========'+name+'上传成功========')
            unzipShell(name,connect)
        })
    })
}

function unzipShell(name,connect) {    // 服务器解压命令
    connect.shell((err, stream) => {
        console.log('========'+name+'解压中========')
        if (err) throw err
        let buf = "";
        stream.on('close', err => {
            connect.end()
            if (err) {
                console.error(err)
                return
            }
            console.info('++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++')
            console.info('======== '+name+'SUCCESS!! ========')
            console.info('++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++')
        }).on('data', data => {
             buf += data
             console.log(buf)
        })
        // 服务器端的命令行运行
        // 主要就是到目录下解压文件后复制到上一层
        // 再删除掉解压出来的文件夹
        stream.write('cd '+server_url+' && unzip dist.zip \nnext\n')
        stream.write('cd dist && /bin/cp -r -f * ../ \nnext\n')
        stream.write('cd ../ && rm -r -f dist \nexit\n')
    })
}

function compress() {  // 压缩命令
    console.log('======== 压缩中======== ')
    // 此处第一个参数为要打包的目录, 第二个参数是打包后的文件名
    compressing.zip.compressDir('dist/', 'dist.zip').then(() => {
        console.log('======== 压缩成功======== ')
        conn()
    })
}

console.log('========打包中========')
// 运行 'npm run build' 命令
const bat = exec('npm run build', (err, stdout, stderr) => {
    if (err) {
        console.error(`exec error: ${err}`);
        return;
    }
    console.log('========打包成功========')
    compress()
})

执行文件

node run_bulid

踩坑

服务器执行解压命令时可能会出现命令不存在的情况,自行百度教程安装unzip命令

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值