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操作xml
Nov 04 Javascript
替代window.event.srcElement效果的可兼容性的函数
Dec 18 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
Aug 09 Javascript
vue日期组件 支持vue1.0和2.0
Jan 09 Javascript
node操作mysql数据库实例详解
Mar 17 Javascript
webpack 2的react开发配置实例代码
Jul 28 Javascript
Angular4学习笔记之实现绑定和分包
Aug 01 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
May 08 Javascript
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
Jun 23 Javascript
详解Vue结合后台的列表增删改案例
Aug 21 Javascript
基于layui内置模块(element常用元素的操作)
Sep 20 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
Oct 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
建立动态的WML站点(三)
2006/10/09 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
php如何连接sql server
2015/10/16 PHP
thinkPHP简单遍历数组方法分析
2016/05/16 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
PHP实现提高SESSION响应速度的几种方法详解
2019/08/09 PHP
异步动态加载js与css文件的js代码
2013/09/15 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
2019/03/02 NodeJs
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
[02:43]DOTA2英雄基础教程 半人马战行者
2014/01/13 DOTA
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
python 多进程通信模块的简单实现
2014/02/20 Python
Python中Django 后台自定义表单控件
2017/03/28 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
分享vim python缩进等一些配置
2018/07/02 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
C#面试题
2016/05/06 面试题
小学教师的个人自我鉴定
2013/10/26 职场文书
公司中秋节活动方案
2014/02/12 职场文书
优秀毕业自我鉴定
2014/02/15 职场文书