Vue CLI 3.x 自动部署项目至服务器的方法


Posted in Javascript onApril 02, 2019

前言

平时部署前端项目流程是:先部署到测试环境ok后再发布到生产环境上,部署到测试环境用 xshell 连上服务器,然后用 xftp 连接服务器,然后本地 build 项目,接着把 build 好的文件通过 xftp 上传到服务器上,整个流程感觉稍有繁琐,重复。

本教程讲解的是 Vue-CLI 3.x 脚手架搭建的vue项目, 利用scp2自动化部署到静态文件服务器 Nginx

一 安装scp2

scp2是一个基于ssh2增强实现,纯粹使用JavaScript编写。

而ssh2就是一个使用nodejs对于SSH2的模拟实现。scp,是secure copy的缩写, scp是Linux系统下基于SSH登陆进行安全的远程文件拷贝命令。这里我们就用这个功能,在Vue编译构建成功之后,将项目推送至测试/生产环境,以方便测试,提高效率。

安装scp2:

npm install scp2 --save-dev

二、配置测试/生产环境 服务器SSH远程登陆账号信息

1. 在项目根目录下, 创建 .env.dev 文件 (测试环境变量)

VUE_APP_SERVER_ID变量表示 当前需部署的测试服务器ID为0

// .env.dev文件中
VUE_APP_SERVER_ID=0

2. 在项目根目录下, 创建 .env.prod 文件 (生产环境变量)

VUE_APP_SERVER_ID变量表示 当前需部署的生产服务器ID为1

// .env.prod文件中
VUE_APP_SERVER_ID=1

3. 在项目根目录下, 创建 deploy/products.js 文件

/*
 *读取env环境变量
 */
const fs = require('fs');
const path = require('path');
// env 文件 判断打包环境指定对应的服务器id
const envfile = process.env.NODE_ENV === 'prod' ? '../.env.prod' : '../.env.dev';
// env环境变量的路径
const envPath = path.resolve(__dirname, envfile);
// env对象
const envObj = parse(fs.readFileSync(envPath, 'utf8'));
const SERVER_ID = parseInt(envObj['VUE_APP_SERVER_ID']);
function parse(src) {
 // 解析KEY=VAL的文件
 const res = {};
 src.split('\n').forEach(line => {
 // matching "KEY' and 'VAL' in 'KEY=VAL'
 // eslint-disable-next-line no-useless-escape
 const keyValueArr = line.match(/^\s*([\w\.\-]+)\s*=\s*(.*)?\s*$/);
 // matched?
 if (keyValueArr != null) {
  const key = keyValueArr[1];
  let value = keyValueArr[2] || '';

  // expand newlines in quoted values
  const len = value ? value.length : 0;
  if (len > 0 && value.charAt(0) === '"' && value.charAt(len - 1) === '"') {
  value = value.replace(/\\n/gm, '\n');
  }

  // remove any surrounding quotes and extra spaces
  value = value.replace(/(^['"]|['"]$)/g, '').trim();

  res[key] = value;
 }
 });
 return res;
}
/*
 *定义多个服务器账号 及 根据 SERVER_ID 导出当前环境服务器账号
 */
const SERVER_LIST = [
 {
 id: 0,
 name: 'A-生产环境',
 domain: 'www.prod.com',// 域名
 host: '46.106.38.24',// ip
 port: 22,// 端口
 username: 'root', // 登录服务器的账号
 password: 'Rock@sz18!',// 登录服务器的账号
 path: '/mdm/nginx/dist'// 发布至静态服务器的项目路径
 },
 {
 id: 1,
 name: 'B-测试环境',
 domain: 'test.xxx.com',
 host: 'XX.XX.XX.XX',
 port: 22,
 username: 'root',
 password: 'xxxxxxx',
 path: '/usr/local/www/xxx_program_test/'
 }
];

module.exports = SERVER_LIST[SERVER_ID];

三、使用scp2库,创建自动化部署脚本

在项目根目录下, 创建 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' ? '生产' : '测试') + '服务器...');
spinner.start();
scpClient.scp(
 'dist/',
 {
 host: server.host,
 port: server.port,
 username: server.username,
 password: server.password,
 path: server.path
 },
 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'));
 }
 }
);

四、添加 package.json 中的 scripts 命令, 自定义名称为 "deploy",

发布到测试环境命令为 npm run deploy:dev,生产环境为 npm run deploy:prod

"scripts": {
 "serve": "vue-cli-service serve --mode dev",
 "build": "vue-cli-service build --mode prod",
 "deploy:dev": "npm run build && cross-env NODE_ENV=dev node ./deploy",
 "deploy:prod": "npm run build && cross-env NODE_ENV=prod node ./deploy",
 },

ps 这里用到了cross_env 得安装 npm i --save-dev cross-env cross-env能跨平台地设置及使用环境变量,这里用来设置是生产环境还是测试环境。

图解

Vue CLI 3.x 自动部署项目至服务器的方法

参考阅读:Vue-CLI 3.X 部署项目至生产服务器的方法

总结

以上所述是小编给大家介绍的Vue-CLI 3.x 自动部署项目至服务器,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript 对象定义方法 简单易学
Mar 22 Javascript
javascript 按回车键相应按钮提交事件
Nov 02 Javascript
JSON 数据格式介绍
Jan 13 Javascript
js和jquery中循环的退出和继续学习记录
Sep 06 Javascript
JavaScript动态改变表格单元格内容的方法
Mar 30 Javascript
JavaScript页面实时显示当前时间实例代码
Oct 23 Javascript
Vue学习笔记进阶篇之函数化组件解析
Jul 21 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
Aug 28 Javascript
vue 点击按钮实现动态挂载子组件的方法
Sep 07 Javascript
vue实现与安卓、IOS交互的方法
Nov 02 Javascript
Seajs源码详解分析
Apr 02 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
Mar 06 Javascript
Vue 组件修改根实例的数据的方法
Apr 02 #Javascript
vue鼠标悬停事件实例详解
Apr 01 #Javascript
jquery简单实现纵向的无缝滚动代码实例
Apr 01 #jQuery
详解Vue前端对axios的封装和使用
Apr 01 #Javascript
浅谈js闭包理解
Apr 01 #Javascript
详解Vue之父子组件传值
Apr 01 #Javascript
微信二次分享报错invalid signature问题及解决方法
Apr 01 #Javascript
You might like
php实现的ping端口函数实例
2014/11/12 PHP
linux下php上传文件注意事项
2016/06/11 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
PHP实现简单用户登录界面
2019/10/23 PHP
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
关于js内存泄露的一个好例子
2013/12/09 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
对Angular.js Controller如何进行单元测试
2016/10/25 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
SpringBoot在yml配置文件中配置druid的操作
2020/11/16 Javascript
在实例中重学JavaScript事件循环
2020/12/03 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
[43:49]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python开发简易版在线音乐播放器
2017/03/03 Python
Python探索之Metaclass初步了解
2017/10/28 Python
django实现用户登陆功能详解
2017/12/11 Python
Python 多线程不加锁分块读取文件的方法
2018/12/11 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
python 爬取B站原视频的实例代码
2020/09/09 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
CSS3 实用技巧:实现黑白图像效果示例代码
2013/07/11 HTML / CSS
信息专业个人的自我评价
2013/12/27 职场文书
家长寄语大全
2014/04/02 职场文书
生产车间标语
2014/06/11 职场文书
咖啡店创业计划书
2014/08/15 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
大学感恩节活动总结
2015/05/05 职场文书
python使用torch随机初始化参数
2022/03/22 Python