项目根目录下,新建两个文件,分别为:“.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简单一些?