项目根目录下,新建两个文件,分别为:“.env.development”和“.env.production”,对应内容如下:
# .env.development # just a flag ENV = 'development' # base api VUE_APP_BASE_API = 'http://localhost:8833' # 原内容:VUE_APP_BASE_API = '/dev-api' VUE_CLI_BABEL_TRANSPILE_MODULES = true
# .env.production # just a flag ENV = 'production' # base api VUE_APP_BASE_API = 'https://www.zjoss.com' # 原内容:VUE_APP_BASE_API = '/prod-api'
新建文件vue.config.js,内容如下:
'use strict' // All configuration item explanations can be find in https://cli.vuejs.org/config/ module.exports = { publicPath: '/', outputDir: 'dist', assetsDir: 'static', lintOnSave: process.env.NODE_ENV === 'development', productionSourceMap: false, devServer: { port: 80, open: true, overlay: { warnings: true, errors: true }, proxy: { '/': { // .env.development 设计期 .env.production 生产期 target: process.env.VUE_APP_BASE_API, changeOrigin: true, // 允许跨域 pathRewrite: { // 代理 '^/': '' } } } } }
以上配置,就是通过代理,将请求地址 / 指向 http://localhost8833 ,设计期和生产期会自动切换定义的地址。
比如请求 /www/test.api 会代理成 http://localhost:8833/www/test.api,示例页面代码如下:
<template> <div> <h1>{{ msg }}</h1> <button type="primary" @click="test">测试</button> </div> </template> <script> import axios from "axios"; export default { name: "HelloWorld", props: { msg: String }, methods: { test() { // console.log(process.env.VUE_APP_BASE_API) axios({ method: "get", url: "/www/test.api", // 防止ie缓存get请求 params: "ie-" + +new Date() + ((Math.random() * 1000).toFixed(0) + "") }) .then(function(resp) { console.log(resp.data); }) .catch(resp => { console.log(resp); }); } } }; </script>
是不是感觉比vue-cli2简单一些?