浅谈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 相关文章推荐
js 替换
Feb 19 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
Sep 29 Javascript
js创建数据共享接口——简化框架之间相互传值
Oct 23 Javascript
JavaScript中Cookie操作实例
Jan 09 Javascript
javascript制作游戏开发碰撞检测的封装代码
Mar 31 Javascript
js实现横向伸展开的二级导航菜单代码
Aug 28 Javascript
jQuery 3.0十大新特性
Jul 06 Javascript
javascript 中的console.log和弹出窗口alert
Aug 30 Javascript
jquery删除table当前行的实例代码
Oct 07 Javascript
js实现倒计时及时间对象
Nov 15 Javascript
layer.confirm取消按钮绑定事件的方法
Aug 17 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
Feb 27 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截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
php利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
php通过rmdir删除目录的简单用法
2015/03/18 PHP
php实现xml与json之间的相互转换功能实例
2016/07/07 PHP
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
utf-8编码引起js输出中文乱码的解决办法
2010/06/23 Javascript
jquery Tab效果和动态加载的简单实例
2013/12/11 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
2014/01/14 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
jQuery实现文本框邮箱输入自动补全效果
2015/11/17 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
在node中如何使用 ES6
2017/04/22 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
纯js实现隔行变色效果
2017/11/29 Javascript
element-ui 表格实现单元格可编辑的示例
2018/02/26 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
微信小程序获取当前位置和城市名
2019/11/13 Javascript
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
Python的Flask框架中实现简单的登录功能的教程
2015/04/20 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
python 爬虫 批量获取代理ip的实例代码
2018/05/22 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
Python+Opencv实现把图片、视频互转的示例
2020/12/17 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
党日活动总结
2014/05/07 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
中专生自荐信
2014/06/25 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
焦裕禄纪念馆观后感
2015/06/09 职场文书
提档介绍信范文
2015/10/22 职场文书
利用Python+OpenCV三步去除水印
2021/05/28 Python