vue多环境变量配置

vue-cli4环境变量配置和代理跨域配置
环境变量配置
跨域代理配置
总结
参考内容
环境变量配置
官方文档 https://cli.vuejs.org/zh/guide/mode-and-env.html#模式

在项目根目录中新建.env, .env.production, .env.pre 等文件

NODE_ENV 和 BASE_URL 是两个特殊变量,在代码中始终可用

一个环境文件只包含环境变量的“键=值”对:

    .env                # 在所有的环境中被载入
    .env.local          # 在所有的环境中被载入,但会被 git 忽略
    .env.[mode]         # 只在指定的模式中被载入
    .env.[mode].local   # 只在指定的模式中被载入,但会被 git 忽略

.env npm run serve 默认的本地开发环境配置
// 默认的本地开发环境配置 每行后面不要加结束分号

    NODE_ENV = "development"

    BASE_URL = "./"

    // 打包后文件夹名字;默认dist;要在vue.config.js 中配置
    // 只有以 VUE_APP 开头的变量会被 webpack.DefinePlugin 静态嵌入到客户端侧的包中,代码中可以通过 process.env.VUE_APP_BASE_API 访问 这样定义的值
    // 在  vue.config.js 中可以获取到 outputDir ,但是在客户端代码中无法获取;
    outputDir = "dist"

    VUE_APP_API = "http://v.juhe.cn/joke"

.env.production npm run build 默认的环境配置(正式服务器)
// build 默认的环境配置(正式服务器)每行后面不要加结束分号

    NODE_ENV = "production"

    BASE_RUL = "./"

    // 打包后文件夹名字;要在vue.config.js 中配置
    outputDir = "dist_pro"

    // 自定义的一些在客户端要获取的变量要以 VUE_APP_  开头 不然无法获取到;
    VUE_APP_OUT_PUTDIR = "dist_pro"

    VUE_APP_API = "http://www.xxxx.com/api"

.env.pre npm run pre 自定义 build 环境配置(预发服务器)
//自定义 build 环境配置(预发服务器)每行后面不要加结束分号

NODE_ENV = "production"

BASE_URL = "./"

// 打包后文件夹名字; 要在vue.config.js 中配置
outputDir = "dist_pre"

VUE_APP_API = "http://www.自定义环境.com"  

package.json 一个模式有多中变量;
“scripts”: {
“serve”: “vue-cli-service serve”,
“build”: “vue-cli-service build”,
“lint”: “vue-cli-service lint”,
“pre”: “vue-cli-service build --mode pre”
}
注意模式不同于 NODE_ENV,一个模式可以包含多个环境变量。也就是说,每个模式都会将 NODE_ENV 的值设置为模式的名称——比如在 development 模式下 NODE_ENV 的值会被设置为 “development”。

你可以通过为 .env 文件增加后缀来设置某个模式下特有的环境变量。比如,如果你在项目根目录创建一个名为 .env.development 的文件,那么在这个文件里声明过的变量就只会在 development 模式下被载入。

你可以通过传递 --mode 选项参数为命令行覆写默认的模式。例如,如果你想要在构建命令中使用开发环境变量,请在你的 package.json 脚本中加入:
“dev-build”: “vue-cli-service build --mode development”,

index.vue
// index.vue 获取最新的笑话
axios.get("/api/content/text.php",
{ baseURL:process.env.NODE_ENV==“development”?’/’:process.env.VUE_APP_API,
params:{key:‘19a578542216aeb8a23ccf5b05a61449’},
headers:{‘Content-Type’:‘application/json;charset=UTF-8’}
})
.then(res=>{
console.log(‘text result’,res);
})
http.js
// axios 封装,(示例demo 所以参数写死的);
// 本地开发环境的话要使用 devServer 代理来跨域 所以 “development” 时 baseURL 设置为 “/”;
app.ajax = (url,method)=>{
return axios({
url:url,
baseURL:process.env.NODE_ENV==“development”?’/’:process.env.VUE_APP_API,
method:method,
params:{
key:‘19a578542216aeb8a23ccf5b05a61449’
},

   data:{
       sort:'desc',
       page:1,
       pagesize:10,
       time:parseInt( new Date().getTime()/1000),
       key:'19a578542216aeb8a23ccf5b05a61449'
   },
   headers:{'Content-Type':'application/json;charset=UTF-8'},

})
}

export default app;

跨域代理配置
本地开发时会涉及到跨域问题;至于在服务端 请加跨域请求头

vue.config.js devServer 配置

module.exports = {
outputDir:process.env.outputDir || ‘dist’,

// 由于浏览器有跨域限制,这里cli 工具提供了 启动本地代理服务器 请求
devServer:{
    open:false,      // 是否打开浏览器;
    hotOnly:true,    // 是否热更新;

    proxy:{
        '/api':{   // 路径中有 /api 的请求都会走这个代理 , 可以自己定义一个,下面移除即可
            target:'http://v.juhe.cn/joke',    // 目标代理接口地址,实际跨域要访问的接口,这个地址会替换掉 axios.defaults.baseURL
            secure:false,
            changeOrigin:true,  // 开启代理,在本地创建一个虚拟服务端
            ws:true,       // 是否启用  websockets;
            pathRewrite:{   // 去掉 路径中的  /api  的这一截
                '^/api':''
            }
        },

        '/test':{
            target:'http://v.juhe.cn/joke',   // 目标代理接口地址,实际跨域要访问的接口,这个地址会替换掉 axios.defaults.baseURL
            secure:false,
            changeOrigin:true,
            ws:true,
            pathRewrite:{
                '^/test':'',
            }
        }
    
    },

}

}

总结
代理配置 时 配置的主机地址 (即 baseURL) 应该为 “/”; 参考 http.js
真时的地址为 在 vue.config.js 中配置; 参考 vue.config.js 中 devServer 配置项

参考内容
https://segmentfault.com/q/1010000022185695
https://cli.vuejs.org/zh/guide/mode-and-env.html#模式
https://github.com/chimurai/http-proxy-middleware

上一篇:让我们来复习一下git


下一篇:下载Java SE Development kit 8 Update281及安装教程