vue如何在多个不同服务器下访问不同地址

目录
  • 一、前言
  • 二、实现思路
  • 三、实践
    • 1. 获取axios请求地址
    • 2. 配置不同服务器的地址
  • 3. 打包时根据 process.env.NODE_ENV 判断不同环境
  • 4. 清除默认 process.env.NODE_ENV
  • 5. 设置不同的 process.env.NODE_ENV
  • 6. 配置 script 脚本

一、前言

通常 vue 在本地启动时,访问的后端地址是同事的机器或者线上一个环境(通常叫开发环境)。假如服务器有多个环境:开发、测试、培训、生产……这样每次发版前,都要手动在 git 仓库修改后端地址,就很麻烦。

所以想要实现一个目的:不修改代码,通过执行不同命令,发布不同环境

二、实现思路

仅针对 npm run build 打包后放到服务器运行的项目,对于直接把源码放在服务器执行 npm run dev 的项目,参照本文思路,修改 build / webpack.dev.conf.js 文件中,process.env 的赋值过程即可。

把不同服务的地址都配置出来,发布不同环境时,执行不同脚本,这样来获取相应的地址。

三、实践

1. 获取axios请求地址

process 是 Vue 中一个全局变量,利用这一点,我们可以从它上边取服务器地址,赋值给 baseURL,取到后既可以封装到 axios 中,也可以作为他用。代码如下:

const baseURL = process.env.BASE_API;        // BASE_API是我们自定义的一个属性,名称随意,只要保证所有地方一致就行

至于在哪里定义 BASE_API ,下面步骤会讲到。

2. 配置不同服务器的地址

2.1 在 config 文件夹下,会看到几个 xxx.env.js 的文件,dev 和 prod 默认就有。

每一个文件,把它当作不同的环境,如 dev 代表开发,prod 代表生产。

如果还有其他环境,比如培训环境,就把 prod.env.js 复制一份(复制 prod 不是 dev),命名为 train.env.js (名字自定义)。

2.2 修改 xxx.env.js 中内容,以生产环境为例,配置一个 BASE_API (就是第1步所用到的),值就是服务器地址。

注意这里的值是单引号嵌套双引号,少一层嵌套是无效的

'use strict'
module.exports = {
    NODE_ENV: '"production"',
    BASE_API: '"https://www.***.com"'
}

2.3 还记得刚刚创建的 train.env.js (如果没有新建的可跳过这一步),对于这种手动创建的,要改一下 NODE_ENV,不然就和生产重名了。

'use strict'
module.exports = {
    NODE_ENV: '"train"',    // production改为自定义名字
    BASE_API: '"https://www.***.com"'
}

3. 打包时根据 process.env.NODE_ENV 判断不同环境

build 文件夹下,webpack.prod.conf.js,找到为 const env = 这段(代码第14行),改成如下形式

const env = (function() {
    const NODE_ENV = process.env.NODE_ENV;
    if (NODE_ENV === 'testing') {
        return require('../config/test.env')
    } else if (NODE_ENV === 'train') {    // 这个就是刚刚自定义的环境
        return require('../config/train.env')
    } else {    // 默认用生产环境
        return require('../config/prod.env')
    }
}())

4. 清除默认 process.env.NODE_ENV

build 文件夹下,build.js 中,默认 process.env.NODE_ENV 是 production,先注释它

'use strict'
require('./check-versions')()

// process.env.NODE_ENV = 'production'    // 注释掉这一段

const ora = require('ora')
const rm = require('rimraf')
const path = require('path')
const chalk = require('chalk')
const webpack = require('webpack')
const config = require('../config')
const webpackConfig = require('./webpack.prod.conf')

5. 设置不同的 process.env.NODE_ENV

由于上一步清除了默认的 process.env.NODE_ENV,要在其他地方加回来

5.1 build文件夹下,新建 buildProd.js

代码如下

'use strict'
process.env.NODE_ENV = 'production'
require('./build.js')

5.2 如果有其他环境,比如上面说的培训环境,新建 buildTrain.js (名字自定义)

代码如下

'use strict'
process.env.NODE_ENV = 'train'    // 值要和 webpack.prod.conf.js 中判断的地方对应上
require('./build.js')

6. 配置 script 脚本

package.json 中,配置 script 脚本。

通常我们打包时,执行 npm run build,经过以上修改后,我们就要用不同的命令,来打包不同环境

/**
  * 本代码中的注释只是为了说明,json中是不允许写这些注释的
  */
"scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "unit": "jest --config test/unit/jest.conf.js --coverage",
    "e2e": "node test/e2e/runner.js",
    "test": "npm run unit && npm run e2e",
    "lint": "eslint --ext .js,.vue src test/unit test/e2e/specs",
//  "build": "node build/build.js",        // 这是原来默认的,写在这里做参照
    "build": "node build/buildProd.js",    // 生产环境,改为 buildProd.js
    "train": "node build/buildTrain.js"    // 培训环境,改为 buildTrain.js
},

到这里,所有的修改都完成了,在发布不同环境时,这样执行:

生产环境:npm run build;培训环境:npm run train。其他环境举一反三。

把不同环境的命令交给集成工程师,让他们写到 Jenkins 脚本中就可以了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • vue配置多代理服务接口地址操作

    一.介绍 随着微服务架构的流行,后台项目逐渐被拆分成不同的模块进行通信,但是前端还是只有一个项目所以在访问不同模块后台时,需要请求不同的地址,在vue项目中,通过配置代理可以进行后端服务器接口地址访问,当需要访问不同微服务的后端接口时就需要配置不同的地址. 二.代码 config/index.js文件中配置代理地址: 自己项目中定义所有接口api管理文件src/api/getData.js: 页面调用接口时xxx.vue 三.总结 1.vue使用配置多代理地址方式可以访问不同的项目地址,使用以上

  • Vue proxyTable配置多个接口地址,解决跨域的问题

    最开始的时候,因为请求后台出现跨域问题. 查找资料配置proxyTable,解决跨域问题.如下图所示: axios请求页面: this.$axios.post('/api/weblogin/login',data).then(res=>{ console.log(res) }) 后面遇到需要连接不同的接口域名,我在proxyTable里增加了一个apiGas.axios请求存在获取得到api但是不能获取apiGas(提示请求资源不存在). proxyTable: { '/api': { targ

  • 详解vue配置请求多个服务端解决方案

    一.解决方案 1.1 描述接口context-path 后端的两个接口服务请求前缀,如下: 前缀1: /bryant 前缀2: / 1.2 vue.config.js配置 devServer: { port: 8005, proxy: { // 第一台服务器配置 '/bryant': { target: 'http://localhost:8081, ws: true, changeOrigin: true, pathRewrite: { '^/bryant': '/bryant' } }, /

  • vue如何在多个不同服务器下访问不同地址

    目录 一.前言 二.实现思路 三.实践 1. 获取axios请求地址 2. 配置不同服务器的地址 3. 打包时根据 process.env.NODE_ENV 判断不同环境 4. 清除默认 process.env.NODE_ENV 5. 设置不同的 process.env.NODE_ENV 6. 配置 script 脚本 一.前言 通常 vue 在本地启动时,访问的后端地址是同事的机器或者线上一个环境(通常叫开发环境).假如服务器有多个环境:开发.测试.培训.生产……这样每次发版前,都要手动在 g

  • Vue项目webpack打包部署到服务器的实例详解

    Vue项目webpack打包部署到服务器 这篇博文主要说的就是我今天遇到的问题,而且在经过我的询问,好多人在打包部署的时候都遇到了一些问题,下面就来说下,如何将Vue项目放置在服务器上,这里以Tomcat为例. 必须要配置的就是/config/index.js 在vue-cli webpack的模板下的/config/index.js,我们可以看到assetsPublicPath这个键,并且这个东西还出现了两次,我第一次打包的时候,只是修改了最下面的assetsPublicPath,将它从'/'

  • 通过vue提供的keep-alive减少对服务器的请求次数

    下面看下通过vue提供的keep-alive减少对服务器的请求次数 VUE2.0中提供了一个keep-alive方法,可以用来缓存组件,避免多次加载相应的组件,减少性能的消耗.比如, 一个页面的数据包括图片.文字等用户都已经加载完了,然后用户通过点击跳转到了另外一个界面.然后从另外一个界面通过返回又回到了原先的界面.如果没有设置的话,那么原先界面的信息就要重新向服务器请求得到.而通过vue提供的keep-alive可以是页面的已经请求的数据得以保存,减少请求的次数,提高用户的体验程度. 缓存组件

  • Vue项目打包部署到iis服务器的配置方法

    一 将Vue项目打包 切换到项目目录下,输入cnpm run build 打包 等待打包完成 二 URL 重写 访问我们的一个url 原因是vue不是根据项目目录的地址访问的,是根据vue-router转发路由访问url,在这里我们应该进行url rewrite url write的方式有两种,一种是在iis下载url rewrite工具配置规则 另一种是配置web.config文件,我用的是第二种 web.config内容 <?xml version="1.0" encodin

  • Vue项目打包部署到apache服务器的方法步骤

    vue项目在开发环境下,让项目运行起来,是通过npm run dev命令,原理是在本地搭建了一个express服务器. 但是在服务器上就不是这样的,必须要通npm run build命令来对整个项目进行打包,打包后会在项目目录下生成一个dist文件夹,内容如下: 然后就是把这些文件丢到服务器上的某个文件夹下,我这里的文件夹名字是ibms 遇到的问题: 1. 直接去访问http://www.xxx.com/ibms/,会发现网页是白屏的,什么都没有,这就比较奇怪了,其实是因为资源加载的路径有问题!

  • 详解本地Vue项目请求本地Node.js服务器的配置方法

    目录 1.使用vue-cli脚手架搭建vue项目 2.使用koa搭建node后端 3.Vue项目中添加后端请求 参考资料: 前言:本文只针对自己需要本地模拟接口于是搭建一个本地node服务器供自己测试使用,仅作自己从头到尾搭建项目的记录 1.使用vue-cli脚手架搭建vue项目 1.在桌面运行 cmd,使用命令vue create demo创建一个vue项目demo,插件依赖等使用默认配置2.项目创建成功之后,使用命令 cd demo,进入 demo 文件夹,然后使用命令 npm run se

  • Vue项目打包并部署nginx服务器的详细步骤

    目录 使用场景: 一.打包 二.部署(nginx) 总结 使用场景: 我们常使用前后端分离项目时,会需要将前端vue打包然后部署. 一.打包 vue项目其实可以直接通过一下语句进行打包: npm run build 默认打包情况如下: 当我们需要将打包名称以及静态资源位置进行修改时便需要进行相应的配置: 1.首先在项目根目录下创建vue.config.js文件 配置内容如下所示(附带跨域问题解决): module.exports = { //打包 publicPath: './', output

  • Vue.js 2.0中select级联下拉框实例

    在网上搜索了Vuejs2.0 动态级联select许久未果,决定自己总结一下自己的经验,有关select在Vue.js 2.0版本中的应用.首先我先说一下的我使用的技术,我参考了网上成熟的经验,选择以Vue.js 2.0+Vue-router+Vuex的全家桶. select首先要区分单选和多选,v-model在select单选和多选上有区别.     select单选实例: <select v-model="fruit"> <option selected valu

  • 在Tomcat服务器下使用连接池连接Oracle数据库

    下面介绍在Tomcat服务器下使用连接池来连接数据库的操作 一:修改web.xml文件: 复制代码 代码如下: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:

  • Vue单页式应用(Hash模式下)实现微信分享的实例

    本文介绍了Vue单页式应用(Hash模式下)实现微信分享的实例,分享给大家,具体如下: 前端微信分享的基本步骤: 一.绑定域名: 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名".这个不多说,微信开发的都应该清楚. 二.引入js文件: 在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js. 请注意,如果你的页面启用了ht

随机推荐