Vue-CLI 3.X 部署项目至生产服务器的方法


Posted in Javascript onMarch 22, 2019

本教程主要讲解的是 Vue-CLI 3.x 脚手架搭建的vue项目, 先构建生成dist文件(纯静态应用), 然后自动化部署到静态文件服务器 Nginx。

一、Nginx服务器文件的配置

server {
    listen 80;
    server_name www.xxxxxx.com;#生产环境
    location / {
      root /usr/local/www/xxx_program/;
      index index.html;
      try_files $uri $uri/ /index.html;
    }
  }
  server {
    listen 80;
    server_name test.xxxxxx.com; #测试环境
    location / {
      root /usr/local/www/xxx_program_test/;
      index index.html;
      try_files $uri $uri/ /index.html;
    }
  }

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

在项目根目录下, 创建 .env 文件 (当前环境变量)

VUE_APP_SERVER_ID变量指代 当前需部署的服务器ID为0

VUE_APP_SERVER_ID=0

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

该文件功能如下:

(1) 读取env环境变量

const fs = require('fs')
const path = require('path')
// env环境变量的路径
const envPath = path.resolve(__dirname, '../.env')
// 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'
  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
}

(2) 定义多个服务器账号 及 根据 SERVER_ID 导出当前环境服务器账号

const SERVER_LIST = [
 {
  id: 0,
  name: 'A-生产环境',
  domain: 'www.xxx.com',
  host: 'XX.XX.XX.XX',
  port: 22,
  username: 'root',
  password: 'xxxxxxx',
  path: '/usr/local/www/xxx_program/'
 },
 {
  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('正在发布到生产服务器...')
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! 成功发布到生产服务器! \n'))
 }
})

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

"scripts": {
  "serve": "vue-cli-service serve",
  "build": "vue-cli-service build",
  "lint": "vue-cli-service lint",
  "deploy": "npm run build && node ./deploy"
 }

五、执行部署任务

在项目根目录下 执行 npm run deploy 命令, 或 使用 vue ui控制面板执行deploy任务, 即可自动打包并部署至线上服务器

备注: 要切换部署的服务器, 只需修改 .env文件中的服务器ID, 然后再执行deploy任务即可.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery+html5烂漫爱心表白动画代码分享
Aug 24 Javascript
基于JS代码实现图片在页面中旋转效果
Jun 16 Javascript
js利用正则表达式检验输入内容是否为网址
Jul 05 Javascript
Canvas实现动态的雪花效果
Feb 13 Javascript
详解JS构造函数中this和return
Sep 16 Javascript
小程序视频列表中视频的播放与停止的示例代码
Jul 20 Javascript
解决vue移动端适配问题
Dec 12 Javascript
Echart折线图手柄触发事件示例详解
Dec 16 Javascript
小程序云开发实现数据库异步操作同步化
May 18 Javascript
Angular单元测试之事件触发的实现
Jan 20 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
Aug 06 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
Oct 24 Javascript
微信小程序城市选择及搜索功能的方法
Mar 22 #Javascript
使用node搭建自动发图文微博机器人的方法
Mar 22 #Javascript
如何从零开始手写Koa2框架
Mar 22 #Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
Mar 22 #Javascript
详解ES6中的Map与Set集合
Mar 22 #Javascript
js控制随机数生成概率代码实例
Mar 21 #Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
Mar 21 #Javascript
You might like
php修改时间格式的代码
2011/05/29 PHP
自己在做项目过程中学到的PHP知识收集
2012/08/20 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
js removeChild 方法深入理解
2016/08/16 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
基于JavaScript实现屏幕滚动效果
2017/01/18 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
python 正则式使用心得
2009/05/07 Python
Python实现好友全头像的拼接实例(推荐)
2017/06/24 Python
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
浅析PyTorch中nn.Linear的使用
2019/08/18 Python
基于css3仿造window7的开始菜单
2010/06/17 HTML / CSS
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
农行实习自我鉴定
2013/09/22 职场文书
临床医师专业个人自我评价范文
2013/11/07 职场文书
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
合同协议书格式
2014/04/18 职场文书
大学生求职信范文
2014/05/24 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
提档介绍信范文
2015/10/22 职场文书
关于MySQL中explain工具的使用
2023/05/08 MySQL