zoukankan      html  css  js  c++  java
  • vue2+axios在不同的环境打包不同的接口地址

    node.js的环境变量

    process

     process 对象是一个 global (全局变量),提供有关信息,控制当前 Node.js 进程。作为一个对象,它对于 Node.js 应用程序始终是可用的,故无需使用 require(),是存在nodejs中的一个全局变量。

    一般有三个环境,一是开发环境,二是测试环境,三是正式环境,每个环境都有一个接口地址。

    process.env

    process.env属性返回一个包含用户环境信息的对象。依靠这个我们就可以给服务器上打上一个标签。这样的话,我们就能根据不同的环境,做一些配置上的处理。比如开启 sourceMap,后端接口的域名切换等等。

    解决环境导致后端接口变换问题,就是利用 process.env.NODE_ENV这个字段来判断。(process是node全局属性,直接用就行了)

    第一种方法:

    开发情况下,我们只要在config/index.js里添加代理就可以,

    proxyTable: {
            '/api':{
                target:'http://localhost:8088',
                pathRewrite:{
                    '^/api':'/static/mock' //请求是以api开头的,会被替换成/static/mack
                }
            }
        }

    需要注意的是

    但是在测试和正式环境下都需要打包,接口地址都会走config/pro.env.js,无法区分这两种环境,所以我们采用不同的打包命令来区分,
    首先在 package.json中,加入npm命令

    "build": "node build/build.js",
    "test": "node build/build.js",

    在prod.env.js中

    const target = process.env.npm_lifecycle_event;
    if (target == 'test') {
        //测试
        var obj = {
            NODE_ENV: '"development"',
            //post用当前域名
            API_ROOT: '""',
            //数据字典
            API_ROOT_DICT:'"http://10.99.9.9:8787"',
        }
    }else {
        //线上
        var obj = {
            NODE_ENV: '"production"',
            //post用当前域名
            API_ROOT: '""',
            //数据字典
            API_ROOT_DICT:'"http://10.99.9.36:8787/"',
        }
    }
    module.exports = obj;
    /*module.exports = {
      NODE_ENV: '"production"',
      API_ROOT: 'http://10.99.9.9:8787'
    }*/
    

    这样npm run build打包的就是正式环境,npm run test打包的就是测试环境。这样就不用每次打包时修改接口域名地址了。

    第二种方法:

    在config/prod.env.js文件中通过后缀名区分不同的环境,因为prod.env.js定义的常量可以在全局引用,省去了我们再定义全局变量的步骤。

    'use strict'
    module.exports = {
      NODE_ENV: '"production"',
    API_PATH_DEV: “‘http://dev.gomain.com’”,
    API_PATH_TEST: “‘http://test.gomain.com:’”,
    API_PATH_PROD: “‘http://prod.gomain.com’”
    }

    在main.js中,引入axios,并根据当前的域名配置axios的baseURL

    import axios from 'axios'
    if (locatin.hostname === 'localhost') {
    axios.defaults.baseURL = process.env.API_PATH_DEV
    } else if (locatin.hostname === 'dev.gomain.com') {
    axios.defaults.baseURL = process.env.API_PATH_DEV
    } else if (locatin.hostname === 'test.gomain.com') {
    axios.defaults.baseURL = process.env.API_PATH_TEST
    } else if (locatin.hostname === 'prod.gomain.com') {
    axios.defaults.baseURL = process.env.API_PATH_PROD
    }
    

    配置好axios后,每次执行 npm run build命令都会根据 当前不同的环境而选用不同的域名地址。这样就可以达到只打包一次就能在不同的环境中运行了,

  • 相关阅读:
    HTML5 WebSocket 权威指南 学习一 (第二章 WebSocket API)
    VM虚拟机 Centos7 lnmp环境 配置域名问题 windows浏览器访问的问题
    https方式下 git push 每次都要输入密码的解决办法
    浏览器禁用Cookie
    使用Nginx反向代理进行负载均衡
    使用Ajax异步上传文件
    装配Bean
    关于Struts2配置文件名修改的问题
    NIO
    部署描述符
  • 原文地址:https://www.cnblogs.com/qdlhj/p/10115673.html
Copyright © 2011-2022 走看看