【问题标题】:gradle spring boot pass environment variables to embedded vuejs appgradle spring boot 将环境变量传递给嵌入式 vuejs 应用程序
【发布时间】:2019-02-22 00:59:25
【问题描述】:

我有一个spring boot 2 应用程序,在/static 嵌入了vuejs font-end,使用gradle 5.1。该应用程序旨在托管在不同的服务器上,因此 vuejs 应用程序的 API url 必须是动态的。

我能想到的最合理的解决方案是在服务器上设置API_IP 环境变量,让vuejs 应用程序这样检索它们:

let url = `http://${process.env.API_IP}:9090/api`;

if (process.env.NODE_ENV === 'development') {
    url = `http://localhost:8090/api`;
}

gradle 构建脚本:

bootJar {
    dependsOn ':ui:jar'

    into('BOOT-INF/classes/static') {
        from "${project(':ui').projectDir}/dist"
    }

    launchScript {
        properties 'inlinedConfScript': 'startScript'
    }
}

但是,我无法将环境变量传递给 vue 应用程序。每次尝试都以process.env.API_IPundefined 结束。 process.env 始终只包含 BASE_URLNODE_ENV

试过了:

  1. export API_IP=*ip* 然后运行 ​​spring boot 应用。
  2. 设置/etc/environment中的变量,注销,登录,运行spring boot app
  3. 将其作为运行参数传递-DAPI_IP=*api*
  4. 设置JAVA_OPTS=-DAPI_IP=*api*

根据https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html

  1. inlinedConfScript 创建文件,其中包含API_IP=*api*JAVA_OPTS=-DAPI_IP=*api* 或仅其中一个。
  2. 在与.jar 文件相同的目录中创建.conf 文件,并使用与#5 中相同的值选项。

请帮忙:)

【问题讨论】:

  • vue是build编译成静态文件的,所以我认为你尝试的对这些静态文件没有影响。(更改环境变量,重启spring...)
  • 它是静态的,不能改变,不能读取环境变量。 proccess.env 是环境,而您执行 npm build。在您的情况下,如果您的 vue 由 springboot 提供服务,则它们位于同一主机上,无需特定 ip:port,只需请求 '/path/url'。
  • 但是确实需要指定端口,因为它不是典型的 80

标签: java spring spring-boot vue.js environment-variables


【解决方案1】:

部分解决方案是从 vuejs 请求中删除 ip/domain 作为@tianzhipeng 的评论。但是,在这种情况下,我只能在端口 8080 上运行后端。

【讨论】:

    猜你喜欢
    • 2020-12-30
    • 2018-03-24
    • 2018-10-06
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 2023-02-24
    相关资源
    最近更新 更多