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+Ajax无刷新分页的实例代码
Feb 08 Javascript
使用jquery修改表单的提交地址基本思路
Jun 04 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
Nov 15 Javascript
Bootstrap进度条组件知识详解
May 01 Javascript
javascript和jquery实现用户登录验证
May 04 Javascript
Vue组件BootPage实现简单的分页功能
Sep 12 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
Aug 29 jQuery
cocos creator Touch事件应用(触控选择多个子节点的实例)
Sep 10 Javascript
分享vue.js devtools遇到一系列问题
Oct 24 Javascript
vue中倒计时组件的实例代码
Jul 06 Javascript
vue首次赋值不触发watch的解决方法
Sep 11 Javascript
vue开发简单上传图片功能
Jun 30 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
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
深入PHP内存相关的功能特性详解
2013/06/08 PHP
php统计文章排行示例
2014/03/04 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
PHP curl使用实例
2015/07/02 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
jQuery获取复选框被选中数量及判断选择值的方法详解
2016/05/25 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
angularJs中datatable实现代码
2017/06/03 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
jquery实现的放大镜效果示例
2020/02/24 jQuery
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
Python Web服务器Tornado使用小结
2014/05/06 Python
python基础教程之缩进介绍
2014/08/29 Python
Python标准库之Sys模块使用详解
2015/05/23 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
python 字典操作提取key,value的方法
2019/06/26 Python
python版百度语音识别功能
2019/07/09 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
计算机应用专业毕业生求职信
2013/10/24 职场文书
在校学生职业规划范文
2014/01/08 职场文书
互联网创业计划书的书写步骤
2014/01/28 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
安全教育第一课观后感
2015/06/17 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书
动作冒险《Hell Is Us》将采用虚幻5 消灭怪物探索王国
2022/04/13 其他游戏