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代码
Jul 01 Javascript
jQuery Validation实例代码 让验证变得如此容易
Oct 18 Javascript
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
Nov 11 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
Jun 23 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
Nov 17 Javascript
使用JQuery中的trim()方法去掉前后空格
Sep 16 Javascript
原生javascript实现图片放大镜效果
Jan 18 Javascript
vue模板语法-插值详解
Mar 06 Javascript
详解React Native开源时间日期选择器组件(react-native-datetime)
Sep 13 Javascript
详解Bootstrap 学习(一)入门
Apr 12 Javascript
JS阻止事件冒泡的方法详解
Aug 26 Javascript
JavaScript流程控制(分支)
Dec 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翻页类
2009/06/01 PHP
php foreach、while性能比较
2009/10/15 PHP
php代码运行时间查看类代码分享
2011/08/06 PHP
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
jQuery插件zTree实现获取一级节点数据的方法
2017/03/08 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
Vue插槽原理与用法详解
2019/03/05 Javascript
详解JavaScript作用域和作用域链
2019/03/19 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
Python中字符编码简介、方法及使用建议
2015/01/08 Python
Python中几个比较常见的名词解释
2015/07/04 Python
python定向爬虫校园论坛帖子信息
2018/07/23 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
详解python分布式进程
2018/10/08 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
Python持续监听文件变化代码实例
2020/07/22 Python
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
Kipling意大利官网:世界著名的时尚休闲包袋品牌
2019/06/05 全球购物
应届生保险求职信
2013/11/11 职场文书
理工科学生的自我评价
2013/12/15 职场文书
大学毕业自我评价
2014/02/02 职场文书
学历公证委托书
2014/04/09 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
工程技术员岗位职责
2015/04/11 职场文书
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android
mysq启动失败问题及场景分析
2021/07/15 MySQL