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

1一、安装scp2和cross-env

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

2二、设置相关环境变量

看着配置哈,懂的都懂。

  • .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

3三、创建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/distnnginx -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')
});

4四、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舒服地打包部署到服务器上了。


原文始发于微信公众号(豆子前端):[vue]scp2+cross-env自动打包部署

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/56664.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!