美文网首页
【vue-cli】部署环境配置问题

【vue-cli】部署环境配置问题

作者: 嘻洋洋 | 来源:发表于2021-11-29 11:16 被阅读0次

采用前后端分离,所以在开发和部署的过程中,后台接口的域名、 第三方登录的URL等其他第三方链接地址等常量存在切换问题,每次打包都要修改很麻烦。

1.主要技术要点

1.1.process.env

process.env就是Nodejs提供的一个API,它返回一个包含用户环境信息的对象。如果我们给Nodejs 设置一个环境变量,并把它挂载在 process.env 返回的对象上,便可以在代码中进行相应的环境判断。具体操作看下面分析。
(1)使用要点
新建一个环境变量NODE_ENV(自定义),用它确定当前所处的开发阶段,生产阶段设为production,开发阶段设为development或staging,然后在脚本中读取process.env.NODE_ENV即可。
(2)定义环境变量
定义的时候有三种方式:
一:js代码定义配置
比如在打包配置文件build.js中定义为生产环境

process.env.NODE_ENV = 'production'

二:在cmd环境配置
Windows配置-临时配置

#node中常用的到的环境变量是NODE_ENV,首先查看是否存在 
set NODE_ENV 
#如果不存在则添加环境变量 
set NODE_ENV=production 
#环境变量追加值 set 变量名=%变量名%;变量内容 
set path=%path%;C:\web;C:\Tools 
#某些时候需要删除环境变量 
set NODE_ENV=

Linux配置-临时配置

#node中常用的到的环境变量是NODE_ENV,首先查看是否存在
echo $NODE_ENV
#如果不存在则添加环境变量
export NODE_ENV=production
#环境变量追加值
export path=$path:/home/download:/usr/local/
#某些时候需要删除环境变量
unset NODE_ENV
#某些时候需要显示所有的环境变量
env

三:package.json中配置
webpack项目里,我们可以通过设置package.json来实现,但是Windows 系统和Mac系统有区别。
Windows 系统

// package.json
{
  ...
  "scripts": {
    "dev": "set NODE_ENV=development &&  webpack-dev-server --open --hot",
    "build": "set NODE_ENV=production &&   --progress --hide-modules"
  }
}

Mac 系统

// package.json
{
  ...
  "scripts": {
    "dev": "export NODE_ENV=development &&  webpack-dev-server --open --hot",
    "build": "export NODE_ENV=production &&   --progress --hide-modules"
  }
}

cross-env是一个跨平台设置环境变量的第三方包,它可以让你只配置一行命令,就能轻松地在多个平台设置环境变量。可以解决上述平台问题,改插件需要先安装:

npm install --save-dev cross-env 
// package.json
{
  ...
  "scripts": {
    "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot",
    "build": "cross-env NODE_ENV=production webpack --mode=production  --progress --hide-modules"
  },
}

通过process.env.NODE_ENV(process是node全局),直接用就行了)
(3)环境判断
通过环境变量判断当前环境,加载对应的系统配置信息
(1)在index.html中判断加载配置

  <% if (process.env.NODE_ENV === 'production') { %>
  <!-- 生产环境 -->
  <script>document.write('<script src="./config/systemConfig.js?t=' + new Date().getTime() + '"><\/script>')</script>
  <script>document.write('<script src="./config/index.js?t=' + new Date().getTime() + '"><\/script>')</script>
  <% }else { %>
  <!-- 开发环境 -->
  <link rel="shortcut icon" type="image/x-icon" href="./static/img/favicon.ico">
  <script src="./static/config/index.js"></script>
  <!--  <script src="./static/plugins/mock-1.0.0-beta3/mock-min.js"></script>-->
  <% } %>

(2)在JS代码中判断

/**
 * 请求地址处理
 * @param {*} actionName action方法名称
 */
http.adornUrl = (actionName) => {
  // 非生产环境 && 开启代理, 接口前缀统一使用[/proxyApi/]前缀做代理拦截!
  return (process.env.NODE_ENV !== 'production' && process.env.OPEN_PROXY ? '/proxyApi/' : window.SITE_CONFIG.baseUrl) + actionName
}

1.2 引入Js文件,不进行编译打包

把配置信息放在Js文件中,该文件不进行编译打包,比如在首页html文件中引入配置文件Js

  <script>document.write('<script src="./config/systemConfig.js?t=' + new Date().getTime() + '"><\/script>')</script>

通过script引入,如果是import方式引入,就会经过webpack打包编译。

2.具体实现

(1)前端系统配置信息文件独立
新建配置信息文件systemConfig.js,该配置文件独立项目代码外,不会通过vue-cli进行编译打包,完全由运维人员根据发布环境进行配置,然后放入发布的指定目录。运维人员提交代码发布包时不会覆盖配置文件。

const systemConfig = {
  //api接口请求地址
  baseUrl: "http://10.150.24.100/erp2/cw/service/ERPII"
}

(2)配置文件加载

  <% if (process.env.NODE_ENV === 'production') { %>
  <!-- 生产环境 -->
  <script>document.write('<script src="./config/systemConfig.js?t=' + new Date().getTime() + '"><\/script>')</script>
  <script>document.write('<script src="./config/index.js?t=' + new Date().getTime() + '"><\/script>')</script>
  <% }else { %>
  <!-- 开发环境 -->
  <link rel="shortcut icon" type="image/x-icon" href="./static/img/favicon.ico">
  <script src="./static/config/index.js"></script>
  <!--  <script src="./static/plugins/mock-1.0.0-beta3/mock-min.js"></script>-->
  <% } %>

(3)使用配置文件
因为导入到index.html,所以在文件的每个地方都可以去访问到systemConfig.js中的常量(这个不用讲都知道)

//index-prod.js生产环境代码使用配置信息
; (function () {
  window.SITE_CONFIG = {}
  // api接口请求地址
  // eslint-disable-next-line no-undef
  window.SITE_CONFIG['baseUrl'] = systemConfig.baseUrl/
})()

相关文章

  • 【vue-cli】部署环境配置问题

    采用前后端分离,所以在开发和部署的过程中,后台接口的域名、 第三方登录的URL等其他第三方链接地址等常量存在切换问...

  • vue-cli项目webpack打包后iconfont文件路径问

    使用vue-cli创建项目,可以自动生成webpack配置文件,npm run build打包文件部署生产环境。 ...

  • Maven环境隔离

    maven环境隔离用于多环境配置问题,解决不同环境配置信息不同的问题,利于部署! 1、pom.xml配置 2、项目...

  • Hive | 环境部署

    环境部署 环境准备 java环境 mysql环境部署 hive环境部署 服务端配置 客户端配置

  • elasticsearch-7.2.1 Linux系统 部署指南

    系统版本 Elasticsearch版本 环境要求 部署 确认部署成功 启动日志 集群配置 安装问题 问题1: 问...

  • Fastdfs的安装部署配置

    linux 运维:安装+部署+配置 安装:编译安装部署:涉及到权限问题配置:见招拆招 运行环境:Ubuntu 16...

  • vue-cli3.0 多环境配置及打包压缩

    1. 问题 vue-cli升级到3.0后 webpack配置不再像2.0一样可以在build文件下进行多环境配置。...

  • Vue2工程化

    目的:建立开发、测试、部署的自动化环境 脚手架 vue-cli vue-cli 的存在将项目环境的初始化工作和复杂...

  • vue-cli 本地开发mock数据使用方法

    vue-cli 中可以通过配置 proxyTable 解决开发环境的跨域问题,具体可以参考这篇文章:Vue-cli...

  • 前端实践VUE

    1:环境搭建 首先我们需要配置下环境,安装node.js,可以方便编译vue文件,配置vue-cli,配置淘宝镜像...

网友评论

      本文标题:【vue-cli】部署环境配置问题

      本文链接:https://www.haomeiwen.com/subject/oaqjlltx.html