浅谈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最简单的拖拽效果实现代码
Sep 24 Javascript
jquery maxlength使用说明
Sep 09 Javascript
JavaScript操作Oracle数据库示例
Mar 06 Javascript
jQuery提示插件alertify使用指南
Apr 21 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
Jul 22 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
Jun 07 Javascript
在vue项目中集成graphql(vue-ApolloClient)
Sep 08 Javascript
详解angularjs跨页面传参遇到的一些问题
Nov 01 Javascript
详解vue中localStorage的使用方法
Nov 22 Javascript
jQuery实现的上拉刷新功能组件示例
May 01 jQuery
Vue实现input宽度随文字长度自适应操作
Jul 29 Javascript
jquery实现淡入淡出轮播图效果
Dec 13 jQuery
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对象Object的概念 介绍
2012/06/14 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
php递归调用删除数组空值元素的方法
2015/04/28 PHP
php中static和const关键字用法分析
2016/12/07 PHP
JavaScript 数组循环引起的思考
2010/01/01 Javascript
javascript json2 使用方法
2010/03/16 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
angularjs的一些优化小技巧
2014/12/06 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
2020/03/09 Javascript
javascript单张多张图无缝滚动实例代码
2020/05/10 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
2020/10/01 Javascript
使用Python构建Hopfield网络的教程
2015/04/14 Python
Python编码爬坑指南(必看)
2016/06/10 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
Python函数基本使用原理详解
2020/03/19 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
2020/12/14 Python
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
美国体育用品商店:Academy Sports + Outdoors
2020/01/04 全球购物
俄罗斯最大的灯具网站:Fandeco
2020/03/14 全球购物
十佳大学生村官事迹
2014/01/09 职场文书
部队领导证婚词
2014/01/12 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
2015年暑期见闻
2015/07/14 职场文书
2016党员发展对象培训心得体会
2016/01/08 职场文书
2016年社区创先争优活动总结
2016/04/05 职场文书
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android
Go 语言结构实例分析
2021/07/04 Golang
nginx安装以及配置的详细过程记录
2021/09/15 Servers
css3 文字断裂效果
2022/04/22 HTML / CSS