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命令都会根据 当前不同的环境而选用不同的域名地址。这样就可以达到只打包一次就能在不同的环境中运行了,

  • 相关阅读:
    Allegro PCB Design GXL (legacy) 使用slide无法将走线推挤到焊盘的原因
    OrCAD Capture CIS 16.6 导出BOM
    Altium Designer (17.0) 打印输出指定的层
    Allegro PCB Design GXL (legacy) 将指定的层导出为DXF
    Allegro PCB Design GXL (legacy) 设置十字大光标
    Allegro PCB Design GXL (legacy) 手动更改元器件引脚的网络
    magento产品导入时需要注意的事项
    magento url rewrite
    验证台湾同胞身份证信息
    IE8对css文件的限制
  • 原文地址:https://www.cnblogs.com/qdlhj/p/10115673.html
Copyright © 2011-2022 走看看