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 相关文章推荐
JS控制表格隔行变色
Jun 26 Javascript
[JS]点出统计器
Oct 11 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
Dec 25 Javascript
Javascript 面试题随笔
Mar 31 Javascript
JQuery for与each性能比较分析
May 14 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
Sep 10 Javascript
JavaScript DOM 学习总结(五)
Nov 24 Javascript
使用JavaScript获取URL中的参数(两种方法)
Nov 16 Javascript
基于JavaScript实现拖动滑块效果
Feb 16 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
Dec 16 Javascript
vue 项目build错误异常的解决方法
Apr 22 Javascript
js实现圆形显示鼠标单击位置
Feb 11 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实现从上传文件创建缩略图的方法
2015/04/02 PHP
PHP类的自动加载机制实现方法分析
2019/01/10 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
JavaScript中省略元素对数组长度的影响
2016/10/26 Javascript
BootstrapValidator实现注册校验和登录错误提示效果
2017/03/10 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
2017/06/19 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
python Django批量导入不重复数据
2016/03/25 Python
Python爬虫之模拟知乎登录的方法教程
2017/05/25 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
2018/03/15 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
用Python实现读写锁的示例代码
2018/11/05 Python
python代码 FTP备份交换机配置脚本实例解析
2019/08/01 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
行政经理岗位职责
2013/11/09 职场文书
小学英语课后反思
2014/04/26 职场文书
党委班子剖析材料
2014/08/21 职场文书
招商引资工作汇报
2014/10/28 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
社会主义核心价值观主题教育活动总结
2015/05/07 职场文书
2015年高三班主任工作总结
2015/05/21 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android