在 VueAxios 中从 .env 设置 baseURL

新手上路,请多包涵

我正在使用安装了 VueAxios 的标准 Vue starer webpack 模板。我想在使用 dev 命令构建时使用 .env 变量配置 axios。我在 /config/index.js 中设置了所有内容:

 const devEnv = require('./dev.env')
module.exports = {
...
    host: devEnv.host || 'localhost',
    port: devEnv.port || 8080,
...
}

然后我在同一目录中的 dev.env.js 中定义我的主机和端口,一切正常。

 const dotenv = require('dotenv').config({path: '../.env'})

let host = process.env.VUE_HOST;
let port = +process.env.VUE_PORT;

module.exports = merge(prodEnv, {
    NODE_ENV: '"development"',
    host,
    port
})

但问题是我无法在我的 Vue 应用程序的 src/main.js 中访问主机值。

如果我尝试这样做,我会收到一个错误

vue 未定义

import axios from 'axios'
import VueAxios from 'vue-axios'
...
Vue.use(VueAxios, axios)
Vue.axios.defaults.baseURL = `http://${process.env.host}:${process.env.port}`;

尽管端口工作正常,但主机没有工作并抛出错误。

原文由 CyberAP 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 691
2 个回答

Vue CLI 3 更新

您现在需要做的就是在您的 .env 文件中设置 VUE_APP_BASE_URL 。然后你就可以像这样访问它:

 process.env.VUE_APP_BASE_URL

但更好的解决方案是 配置开发服务器


以前的解决方案

解决方案非常简单:

  • webpack.dev.conf.js 插件中为这种情况定义一个特殊变量,为此省略使用 process.env
   new webpack.DefinePlugin({
      'process.env': require('../config/dev.env'),  // You can't use this for baseURL
      'baseURL': JSON.stringify(`http://${HOST || config.dev.host}:${PORT || config.dev.port}`)
  }),

  • \src\main.js 定义如下:
   if (typeof baseURL !== 'undefined')
  {
      Vue.axios.defaults.baseURL = baseURL;
  }

原文由 CyberAP 发布,翻译遵循 CC BY-SA 4.0 许可协议

请注意,只有 NODE_ENV、BASE_URL 和以 VUEAPP 开头的变量将使用 webpack.DefinePlugin 静态嵌入到客户端包中。

所以像 VUE_APP_HOST 这样的变量名

请参考链接: https ://cli.vuejs.org/guide/mode-and-env.html#environment-variables

原文由 Priyanka Shelar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题