浅谈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.LazyLoad.js修正版下载,实现图片延迟加载插件
Mar 12 Javascript
JS下载文件|无刷新下载文件示例代码
Apr 17 Javascript
浅谈 jQuery 事件源码定位问题
Jun 18 Javascript
简介JavaScript中toTimeString()方法的使用
Jun 12 Javascript
ajax如何实现页面局部跳转与结果返回
Aug 24 Javascript
angularjs实现多张图片上传并预览功能
Feb 24 Javascript
Bootstrap如何激活导航状态
Mar 22 Javascript
详解vue跨组件通信的几种方法
Jun 15 Javascript
浅谈关于axios和session的一些事
Jul 13 Javascript
JS中使用media实现响应式布局
Aug 04 Javascript
微信小程序实现天气预报功能
Jul 18 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
Jul 24 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设计模式中的工厂模式
2008/06/12 PHP
PHP 转义使用详解
2013/07/15 PHP
删除html标签得到纯文本可处理嵌套的标签
2014/04/28 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
Laravel 修改验证异常的响应格式实例代码详解
2020/05/25 PHP
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
JavaScript中的onerror事件概述及使用
2013/04/01 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
2013/06/06 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
Vue中如何实现proxy代理
2018/04/20 Javascript
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
node.js爬虫框架node-crawler初体验
2020/10/29 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
Django 项目通过加载不同env文件来区分不同环境
2020/02/17 Python
python文件读取失败怎么处理
2020/06/23 Python
树莓派4B安装Tensorflow的方法步骤
2020/07/16 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
香港个人化生活购物网站:Ballyhoo Limited
2016/09/10 全球购物
环保建议书200字
2014/05/14 职场文书
大学生毕业求职信
2014/06/12 职场文书
委托书的写法
2014/08/30 职场文书
2014年市场部工作总结
2014/11/25 职场文书
杭白菊导游词
2015/02/10 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
小学班长竞选稿
2015/11/20 职场文书
2019年二手房买卖合同范本
2019/10/14 职场文书