浅谈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 相关文章推荐
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
May 11 Javascript
JavaScript声明变量名的语法规则
Jul 10 Javascript
jQuery实现的多滑动门,多选项卡效果代码
Mar 28 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
May 07 Javascript
JavaScript的String字符串对象常用操作总结
May 26 Javascript
js中Number数字数值运算后值不对的解决方法
Feb 28 Javascript
js实现彩色条纹滚动条效果
Mar 15 Javascript
Vue.js搭建移动端购物车界面
Jun 28 Javascript
浅谈JS中几种轻松处理'this'指向方式
Sep 16 Javascript
layui-select动态选中值的例子
Sep 23 Javascript
vue-next/runtime-core 源码阅读指南详解
Oct 25 Javascript
微信小程序基础教程之echart的使用
Jun 01 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有序表查找之插值查找算法示例
2018/02/10 PHP
PHP设计模式之简单工厂和工厂模式实例分析
2019/03/25 PHP
浅谈laravel中的关联查询with的问题
2019/10/10 PHP
xml和web特殊字符
2009/04/28 Javascript
jQuery 性能优化指南(2)
2009/05/21 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
2015/06/10 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
基于JavaScript实现一个简单的Vue
2018/09/26 Javascript
[原创]微信小程序获取网络类型的方法示例
2019/03/01 Javascript
JS中的算法与数据结构之集合(Set)实例详解
2019/08/20 Javascript
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
python抓取网页图片示例(python爬虫)
2014/04/27 Python
Python实现批量将word转html并将html内容发布至网站的方法
2015/07/14 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
pytorch进行上采样的种类实例
2020/02/18 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
2020/03/14 Python
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
考察邀请函范文
2015/01/31 职场文书
格列佛游记读书笔记
2015/06/30 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书