美文网首页
NODE 自动部署 从打包到上传服务器

NODE 自动部署 从打包到上传服务器

作者: 骑着母猪去买菜 | 来源:发表于2019-04-22 10:17 被阅读0次

    每次项目打包后,需要先 npm run build ,然后将项目打包成 zip ,再上传到服务器解压,特别的繁琐,于是写了一个小脚本,完成一系列的操作。
    此处服务器用的是 centos 系统。

    安装需要用到的包

    cnpm i compressing ssh2 --save-dev
    

    代码

    /* eslint-disable */
    const {exec} = require('child_process')
    const compressing = require('compressing')
    const Client = require('ssh2').Client
    const server = {
        host: 'localhost', // 服务器地址
        port: 22, // 端口号
        username: 'root', // 用户名
        password: '123456' // 密码
    }
    
    const connect = new Client()
    
    function conn() {   // 连接服务器
        console.log('*******连接服务器*******')
        connect.on('ready', () => {
            upload()
        }).on('error', (err) => {
            console.error(err)
            console.log('*******连接出错*******')
        }).on('end', () => {
            console.log('*******连接关闭*******')
        }).on('close', (err) => {
            if (err) {
                console.log('*******连接出错*******')
            }
        }).connect(server)
    }
    
    function upload() { // 上传
        console.log('*******开始上传*******')
        connect.sftp((err, sftp) => {
            if (err) throw err
            // 第一个参数为要上传的文件名, 第二个参数为服务器目录
            sftp.fastPut('dist.zip', '/home/yunwo/front/pc_vue/dist.zip', (err, res) => { 
                if (err) {
                    console.log(err)
                    console.error('*******上传失败*******')
                    connect.end()
                    return
                }
                unzipShell()
            })
        })
    }
    
    function unzipShell() {    // 服务器解压命令
        connect.shell((err, stream) => {
            console.log('*******解压中*******')
            if (err) throw err
            let buf = "";
            stream.on('close', err => {
                connect.end()
                if (err) {
                    console.error(err)
                    return
                }
                console.info('******* SUCCESS!! *******')
            }).on('data', data => {
                buf += data
                console.log(buf)
            })
            // 服务器端的命令行运行
            // 主要就是到目录下解压文件后复制到上一层
            // 再删除掉解压出来的文件夹
            stream.write('cd /home/yunwo/front/pc_vue/ && 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 自动部署 从打包到上传服务器

          本文链接:https://www.haomeiwen.com/subject/bbiegqtx.html