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 相关文章推荐
javaScript 关闭浏览器 (不弹出提示框)
Jan 31 Javascript
javascript 解析url的search方法
Feb 09 Javascript
简单实用jquery版三级联动select示例
Jul 04 Javascript
jquery提交form表单时禁止重复提交的方法
Feb 13 Javascript
整理JavaScript创建对象的八种方法
Nov 03 Javascript
用jQuery向div中添加Html文本内容的简单实现
Jul 13 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
Feb 13 Javascript
JS简单获取日期相差天数的方法
Apr 24 Javascript
微信小程序自定义组件
Aug 16 Javascript
fullpage.js最后一屏滚动方式
Feb 06 Javascript
jQuery实现图片简单轮播功能示例
Aug 13 jQuery
通过实例解析JavaScript for in及for of区别
Jun 15 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
php中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
smarty自定义函数用法示例
2016/05/20 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
2017/09/02 PHP
Laravel向公共模板赋值方法总结
2019/06/25 PHP
用于自动添加Digg This!按钮的JavaScript
2006/12/23 Javascript
javascript学习网址备忘
2007/05/29 Javascript
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
2013/10/23 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
JS实现简单的图书馆享元模式实例
2015/06/30 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
写一个移动端惯性滑动&回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
Nuxt.js SSR与权限验证的实现
2018/11/21 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
JS闭包原理及其使用场景解析
2020/12/03 Javascript
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
康拓普公司Java笔面试
2016/09/23 面试题
Java面试笔试题大全
2016/11/23 面试题
新员工辞职信范文
2015/05/12 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书
Java面试题冲刺第十六天--消息队列
2021/08/07 面试题