浅谈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动态添加、修改、删除对象的属性与方法详解
Jan 27 Javascript
使用text方法获取Html元素文本信息示例
Sep 01 Javascript
微信内置浏览器私有接口WeixinJSBridge介绍
May 25 Javascript
详解JavaScript的while循环的使用
Jun 03 Javascript
jquery可定制的在线UEditor编辑器
Nov 17 Javascript
简单实现jQuery多选框功能
Jan 09 Javascript
js oncontextmenu事件使用详解
Mar 25 Javascript
详解vue-resource promise兼容性问题
Jun 20 Javascript
利用JS判断客户端类型你应该知道的四种方法
Dec 22 Javascript
js getBoundingClientRect使用方法详解
Jul 17 Javascript
Vue使用mixin分发组件的可复用功能
Sep 01 Javascript
js中复选框的取值及赋值示例详解
Oct 18 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
世界第一个无线广播电台 KDKA
2021/03/01 无线电
使用PHP下载CSS文件中的图片的代码
2013/09/24 PHP
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
PHP+iframe图片上传实现即时刷新效果
2016/11/18 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
jQuery使用手册之一
2007/03/24 Javascript
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
2011/09/02 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
原生js实现手风琴功能(支持横纵向调用)
2017/01/13 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
JavaScript编写的网页小游戏,很给力
2017/08/18 Javascript
vue里面父组件修改子组件样式的方法
2018/02/03 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
JQuery中DOM节点的操作与访问方法实例分析
2019/12/23 jQuery
Python输出带颜色的字符串实例
2017/10/10 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
2020/02/28 Python
详解python os.path.exists判断文件或文件夹是否存在
2020/11/16 Python
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
财务经理的岗位职责
2013/12/17 职场文书
技校毕业生自荐信范文
2014/03/07 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
python中取整数的几种方法
2021/11/07 Python