VUE配置proxy代理、开发环境、测试环境、生产环境


在项目开发一直到上线的过程中,我们一般会配置至少三个环境(开发环境 dev、测试环境 test、生产环境prod)

1.根目录下新建三个环境的配置文件,.env.development(开发环境).env.test(测试环境).evn.production(生产环境)

2、开发环境 .env.development

NODE_ENV = 'development'

# 开发环境,api前缀
VUE_APP_BASE_API = '/api'

#开发环境,Url地址
VUE_APP_BASE_RUL = 'http://xxxxxxxxxxxxx:8081/

测试环境 .env.test

# 测试环境
NODE_ENV = 'test'

# 测试环境,api前缀
VUE_APP_BASE_API = '/test-api'

#测试环境,Url地址
VUE_APP_BASE_RUL = 'http://xxxxxxxxxxx:8081/'

生产环境 .env.production

# 生产环境
NODE_ENV = 'production'

# 生产环境,api前缀
VUE_APP_BASE_API = '/prod-api'

#生产环境,Url地址
VUE_APP_BASE_RUL = 'http://xxxxxxxxxx:8081/'

3、vue.config.js 配置

// webpack-dev-server 相关配置
    devServer: { // 设置代理
        host: '0.0.0.0', //
        port: 80, //自定义端口
        https: false, //false关闭https,true为开启
        open: true, //自动打开浏览器
        proxy: {
            [process.env.VUE_APP_BASE_API]: { 
                target: process.env.VUE_APP_BASE_RUL,
                // 如果要代理 websockets
                ws: true,
                changeOrigin: true,
                pathRewrite: {   //重写路径,这种是没有我们定义的前缀
                    ['^' + process.env.VUE_APP_BASE_API]: '' 
                }
            }
        }
    },

4、package.json 配置打包、启动

"serve": "vue-cli-service serve",    //启动
"build:test": "vue-cli-service build --mode test",   //测试
"build:prod": "vue-cli-service buil

5、封装了axios的话,在axios配置的基地址里面就直接写上动态的地址就可以了

let request = axios.create({ 
        baseURL: process.env.VUE_APP_URL, 
        responseType: "json", 
        timeout: 60000,
    });


这里需要注意的是,在vue.config.js中配置了proxy跨域后执行npm run build打包部署到服务器上会报跨域问题。为什么会报错呢?因为编译打包后,前端页面成为了单独的静态资源,代理服务器devServer.proxy被抽离出去了。

也就是说,devServer.proxy不会一起打包到dist文件夹下,所以相当于我们没有配置代理服务器!!

怎么解决呢?资源要被访问,那必须要有一个代理服务器来装载它。我们部署上线最常见的就是使用nginx进行反向代理,只需要修改nginx配置文件即可。

location ^~/api/ {
     proxy_pass http://xxx.xxx.xxx.xxx:8889/api/;
}


声明:BenBonBen博客|版权所有,违者必究|如未注明,均为原创

转载:转载请注明原文链接 - VUE配置proxy代理、开发环境、测试环境、生产环境


过去太迟,未来太远,当下最好