浅谈Vue 自动化部署打包上线


Posted in Javascript onJune 14, 2020

应用场景

项目打包后发布到正式环境,需要后端配合或者前端自己上传到服务器上,操作不便且容易产生问题,比如后台不在的情况而前台没有服务器的信息,这时发布就被延;或者前端自己上传容易导致误操作,如果上传错地方没正确上传都可能导致线上直接崩掉,而这对于已发布的产品而言是致命的。因此,有必要实现自动化部署代码到线上,解放双手的同时也减轻后端兄弟的压力。

项目使用

1、在项目根目录下, 创建 deploy/products.js 文件

/*
 *读取env环境变量
 */
const SERVER_ID = process.env.NODE_ENV === "prod" ? 0 : 1;

/*
 *定义多个服务器账号 及 根据 SERVER_ID 导出当前环境服务器账号
 */
const SERVER_LIST = [
 {
  id: 0,
  name: "A-生产环境",
  domain: "xxx.xxx.xxx", // 域名
  host: "118.31.245.118",
  port: 22,
  username: "root",
  password: "Yrkj1234",
  indexpath: "/var/www/yiqitong/public/theme/index/default/index/",
  assetspath: "/var/www/yiqitong/public/h5-static/"
 },
 {
  id: 1,
  name: "B-测试环境",
  domain: "yiqitong.118.easysoft168.com",
  host: "118.31.245.118",
  port: 22,
  username: "root",
  password: "Yrkj1234",
  indexpath: "/var/www/yiqitong/public/theme/index/default/index/",
  assetspath: "/var/www/yiqitong/public/h5-static/"
 }
];

module.exports = SERVER_LIST[SERVER_ID];

2、在项目根目录下, 创建 deploy/index.js 文件

// 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" ? "生产" : "测试") +
  "服务器..."
);

var Client = require("ssh2").Client;

var conn = new Client();
conn
 .on("ready", function() {
  // rm 删除dist文件,n 是换行 换行执行 重启nginx命令 我这里是用docker重启nginx
  conn.exec(
   "rm -rf /var/www/yiqitong/public/theme/index/default/index/index.htmln rm -rf /var/www/yiqitong/public/h5-static",
   function(err, stream) {
    if (err) throw err;
    stream
     .on("close", function(code, signal) {
      // 在执行shell命令后,把开始上传部署项目代码放到这里面
      spinner.start();
      scpClient.scp(
       "dist/index.html",
       {
        host: server.host,
        port: server.port,
        username: server.username,
        password: server.password,
        path: server.indexpath
       },
       function(err) {
        if (err) {
         console.log(chalk.red("发布失败.n"));
         throw err;
        } else {
         scpClient.scp(
          "dist/h5-static/",
          {
           host: server.host,
           port: server.port,
           username: server.username,
           password: server.password,
           path: server.assetspath
          },
          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: server.host,
  port: server.port,
  username: server.username,
  password: server.password
 });

3、添加 package.json 中的 scripts 命令, 自定义名称为 "deploy""scripts": {

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

运行npm run deploy:dev发布到测试环境;npm run deploy:prod发布到生产环境。至此大功告成。总结这种打包方式可能会存在风险问题,毕竟ip和密码都写在前端。我推荐使用Jenkins自动化打包参考文章segmentfault.com/a/119000001…总结

到此这篇关于浅谈Vue 自动化部署打包上线的文章就介绍到这了,更多相关Vue 自动化部署打包内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
Oct 29 Javascript
ext 代码生成器
Aug 07 Javascript
javascript 手动给表增加数据的小例子
Jul 10 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
May 26 Javascript
详解JS面向对象编程
Jan 24 Javascript
解析javascript瀑布流原理实现图片滚动加载
Mar 10 Javascript
jQuery Html控件基本操作(日常收集整理)
Mar 11 Javascript
JS高仿抛物线加入购物车特效实现代码
Feb 20 Javascript
深入理解Vue nextTick 机制
Apr 28 Javascript
layui清除radio的选中状态实例
Nov 14 Javascript
js实现文字头像的生成代码
Mar 07 Javascript
原生js实现俄罗斯方块
Oct 20 Javascript
JS定时器如何实现提交成功提示功能
Jun 12 #Javascript
Jquery ajax书写方法代码实例解析
Jun 12 #jQuery
ng-alain的sf如何自定义部件的流程
Jun 12 #Javascript
如何在微信小程序中使用骨架屏的步骤
Jun 12 #Javascript
基于Web Audio API实现音频可视化效果
Jun 12 #Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
Jun 12 #Javascript
学前端,css与javascript重难点浅析
Jun 11 #Javascript
You might like
PHP 批量更新网页内容实现代码
2010/01/05 PHP
PHP处理Oracle的CLOB实例
2014/11/03 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
js表数据排序 sort table data
2009/02/18 Javascript
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
统计jQuery中各字符串出现次数的工具
2012/05/03 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
DOM基础教程之事件类型
2015/01/20 Javascript
jQuery插件slider实现拖动滑块选取价格范围
2015/04/30 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
Vue + Vue-router 同名路由切换数据不更新的方法
2017/11/20 Javascript
JavaScript实现的DOM绘制柱状图效果示例
2018/08/08 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
Python 基于Twisted框架的文件夹网络传输源码
2016/08/28 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
使用Python+wxpy 找出微信里把你删除的好友实例
2019/02/21 Python
python实现电子产品商店
2019/02/26 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
python模拟斗地主发牌
2020/04/22 Python
python中if嵌套命令实例讲解
2021/02/25 Python
使用css3匹配手机屏幕横竖状态
2014/01/27 HTML / CSS
泰国王权免税店官方网站:KingPower
2019/03/11 全球购物
如何使用PHP session
2015/04/21 面试题
会计与审计专业大专生求职信
2013/10/03 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书