[vue]scp2+cross-env自动打包部署

在这里插入图片描述

一、安装scp2和cross-env

npm install scp2 --save-dev
npm install cross-env --save-dev 

二、设置相关环境变量

看着配置哈,懂的都懂。

  • .env文件

    不过使用cross-env的话,可以不必在.env中设置NODE_ENV

NODE_ENV=prod # 设置环境为prod
# NODE_ENV=devlop 设置环境为devlop
  • .env.prod文件

    用于生产环境,为production简写

VUE_APP_API_BASE_URL=x.x.x.x:8000
  • .env.devlop文件

    通常用于开发环境,为development简写

VUE_APP_API_BASE_URL=x.x.x.x:8000

三、创建scp2自动化部署脚本

复制粘贴,改配置,傻瓜式操作。

3.1 版本一 简易版本

// 引入scp2
var client = require('scp2')
// 下面三个插件用于deploy时美化控制台,可有可无
const ora = require('ora')
const chalk = require('chalk')
const spinner = ora(chalk.green('正在发布到服务器...'))

const myServer =  {
  'host': '你的服务器ip',
  'port': '22',
  'username': '你的用户名',
  'password': '你的密码',
  'path': '/opt/nginx/html'
}

client.scp('./dist/', myServer, err => {
  spinner.stop()
  if (!err) {
    console.log(chalk.green("项目发布完毕!"))
  } else {
    console.log("err", err)
  }
})

3.2 版本二 加了点花里花哨

//  deploy/index.js里面
const scpClient = require('scp2');
const ora = require('ora');
const chalk = require('chalk');
const server = require('./products');
const spinner = ora(
    '正在发布到' +
    (process.env.NODE_ENV === 'prod' ? '生产' : '测试') +
    '服务器...'
);
const myServer =  {
  'host': '你的服务器ip',
  'port': '22',
  'username': '你的用户名',
  'password': '你的密码',
  'path': '/opt/nginx/html'  // nginx的html地址
}
let Client = require('ssh2').Client;

let conn = new Client();
conn
    .on('ready', function() {
    // rm 删除dist文件,\n 是换行 换行执行 重启nginx命令 
    // docker restart nginx 重启nginx
    // nginx -s reload 重启nginx
    conn.exec('rm -rf /etc/nginx/dist\nnginx -s reload', function(
              err,
               stream
              ) {
        if (err) throw err;
        stream
            .on('close', function(code, signal) {
            // 在执行shell命令后,把开始上传部署项目代码放到这里面
            spinner.start();
            scpClient.scp(
                './dist',
                myServer,
                function(err) {
                    spinner.stop();
                    if (err) {
                        console.log(chalk.red('发布失败.\n'));
                        throw err;
                    } else {
                        console.log(
                            chalk.green(
                                'Success! 成功发布到' +
                                (process.env.NODE_ENV === 'prod'
                                 ? '生产'
                                 : '测试') +
                                '服务器! \n'
                            )
                        );
                    }
                }
            );

            conn.end();
        })
            .on('data', function(data) {
            console.log('STDOUT: ' + data);
        })
            .stderr.on('data', function(data) {
            console.log('STDERR: ' + data);
        });
    });
})
    .connect({
    host: myServer.host,
    port: myServer.port,
    username: myServer.username,
    password: myServer.password
    //privateKey: require('fs').readFileSync('/home/admin/.ssh/id_dsa')
});

四、package.json 配置

自定义部署的scripts 命令, 一般定义名称为 “deploy”。

"scripts": {
    "serve": "vue-cli-service serve --mode dev",
    "build": "vue-cli-service build --mode prod",
    "lint": "vue-cli-service lint",
    "deploy:dev": "npm run build && cross-env NODE_ENV=develop node ./deploy",
    "deploy:prod": "npm run build && cross-env NODE_ENV=prod node ./deploy",
},

现在就可以用npm run deploy:prod舒服地打包部署到服务器上了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值