浅谈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 相关文章推荐
jquery插件如何使用 jQuery操作Cookie插件使用介绍
Dec 15 Javascript
JS预览图像将本地图片显示到浏览器上
Aug 25 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
Feb 08 Javascript
C#微信小程序服务端获取用户解密信息实例代码
Mar 10 Javascript
详解vue-cli构建项目反向代理配置
Sep 07 Javascript
JavaScript实现音乐自动切换和轮播
Nov 05 Javascript
如何开发出更好的JavaScript模块
Dec 22 Javascript
JS控制鼠标拒绝点击某一按钮的实例
Dec 29 Javascript
详解vue添加删除元素的方法
Jun 30 Javascript
如何为vuex实现带参数的 getter和state.commit
Jan 04 Javascript
JS轮播图的实现方法2
Aug 25 Javascript
JavaScript使用canvas绘制坐标和线
Apr 28 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异步执行的详解
2013/06/03 PHP
浅析PHP中Session可能会引起并发问题
2015/07/23 PHP
Javascript中的数学函数集合
2007/05/08 Javascript
js parsefloat parseint 转换函数
2010/01/21 Javascript
js下写一个事件队列操作函数
2010/07/19 Javascript
js中的string.format函数代码
2020/08/11 Javascript
用javascript作一个通用向导说明
2011/08/30 Javascript
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
IE下JS读取xml文件示例代码
2013/08/05 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
JS如何设置元素样式的方法示例
2017/08/28 Javascript
Vue入门之数据绑定(小结)
2018/01/08 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
2018/07/08 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
python获取目录下所有文件的方法
2015/06/01 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
pycharm运行出现ImportError:No module named的解决方法
2018/10/13 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
解决os.path.isdir() 判断文件夹却返回false的问题
2019/11/29 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
python实现程序重启和系统重启方式
2020/04/16 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
Linux机考试题
2015/07/17 面试题
运动会开幕式解说词
2014/02/05 职场文书
2014医学院领导干部四风对照检查材料思想汇报
2014/09/16 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书
2014年教研员工作总结
2014/12/23 职场文书
大学生操行评语大全
2014/12/31 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android