如何在Quasar Framework中从docker compose获取环境变量?

约翰·战士

我有下一个docker-compose配置

version: '3'

services:  
 frontend:
  image: frontend-image
  depends_on:
   - backend-image
  ports:
    - 8081:8081
  environment:
   - OAUTH_CLIENT="client"
   - OAUTH_CLIENT_KEY="Client111"
   - BACKEND_HOSTNAME="localhost"
   - BACKEND_PORT="8080"

这是前端映像Dockerfile

FROM  quasarframework/quasar-org:1.0.0

WORKDIR /opt/app

COPY package.json /opt/app/package.json

RUN rm -r node_modules

RUN npm install

RUN npm -g install quasar-cli

COPY . /opt/app

EXPOSE 4000

EXPOSE 8081

CMD ["quasar", "dev"]

但是当我执行console.log(process.env)时,我只有一个属性:

{NODE_ENV:"development"}

前端的一切工作正常,我的唯一问题是环境变量。我的目标是为不同的环境设置不同的环境变量。

Docker版本

Client:
 Version:       17.12.0-ce
 API version:   1.35
 Go version:    go1.9.2
 Git commit:    c97c6d6
 Built: Wed Dec 27 20:11:19 2017
 OS/Arch:       linux/amd64

Server:
 Engine:
  Version:      17.12.0-ce
  API version:  1.35 (minimum version 1.12)
  Go version:   go1.9.2
  Git commit:   c97c6d6
  Built:        Wed Dec 27 20:09:53 2017
  OS/Arch:      linux/amd64
  Experimental: false

Docker Compose版本

docker-compose version 1.18.0, build 8dd22a9
docker-py version: 2.6.1
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t  3 May 2016
f然

Quasar允许您通过的build.env属性传递自定义环境变量quasar.conf.js

Quasar App CLI v2 +

{
    // ...
    build: {
        env: {
            OAUTH_CLIENT: process.env.OAUTH_CLIENT,
            OAUTH_CLIENT_KEY: process.env.OAUTH_CLIENT_KEY),
            BACKEND_HOSTNAME: process.env.BACKEND_HOSTNAME,
            BACKEND_PORT: parseInt(process.env.BACKEND_PORT),
        }
    }
}

现在,您将可以在类星体应用程序中使用env变量:

console.log(process.env.APP_OAUTH_CLIENT);
// note, that
console.log(process.env);
// won't work as you might expect

v2之前的Quasar App CLI

您可以这样简单:

{
    // ...
    build: {
        env: {
            OAUTH_CLIENT: JSON.stringify(process.env.OAUTH_CLIENT),
            OAUTH_CLIENT_KEY: JSON.stringify(process.env.OAUTH_CLIENT_KEY),
            BACKEND_HOSTNAME: JSON.stringify(process.env.BACKEND_HOSTNAME),
            BACKEND_PORT: process.env.BACKEND_PORT, // this will be integer at runtime!
        }
    }
}

或批量传递所有内容:

{
    // ...
    build: {
        env: Object.fromEntries(Object.entries(process.env)
            /* Filter variables which you want to pass to quasar, for example only pass variables starting with APP_ */
            .filter(([ key, value ]) => /^APP_/.test(key))
            /* Enquote strings so that they remain strings when inlined to source code by quasar */
            .map(([ key, value ]) => [ key, JSON.stringify(value) ])
        )
    }
}

现在,您将可以在类星体应用程序中使用env变量:

console.log(process.env);
console.log(process.env.APP_OAUTH_CLIENT);

不过有几点注意事项

首先,强烈建议您过滤传递给类星体应用程序的变量,即对公共作用域的含义

默认情况下,vue-cli会执行类似的操作:

请注意,只有NODE_ENVBASE_URL和以开头的变量VUE_APP_将被静态嵌入到客户端捆绑包中(来自vue-cli guide)。

Quasar不会开箱即用地嵌入任何内容,但是可以让您完全控制使用它的build.envconfig属性嵌入什么以及如何嵌入

其次,请注意,当您传递{ BACKEND_HOSTNAME: "localhost" }变量然后像使用类其按原样var h = process.env.BACKEND_HOSTNAME;静态替换它一样使用它时,不要尝试以某种方式序列化该值,因此它的结果为,这不是有效的JS,您可能会收到语法错误。相反,如果您出于安全考虑,建议您在传递给quasar配置时将所有env值序列化为字符串,这样就变成了localhost var h = localhostJSON.stringifyvar h = process.env.BACKEND_HOSTNAME;var h = "localhost"

我还发现定义一个专门的模块来处理环境变量很有用:

export default {
    oauthClient: process.env.OAUTH_CLIENT,
    oauthClientKey: process.env.OAUTH_CLIENT_KEY,
    backendHostname: process.env.BACKEND_HOSTNAME,
    backendPort: process.env.BACKEND_PORT,
    debug: process.env.DEBUG === 'true'
}

这样,所有环境导入都具有一个入口。但是请注意,它不提供代码剥离

import myenv from './myenv';
if (myenv.debug) {
    console.log('We are debugging something');
}

此代码永远不会被剥离。要使用代码剥离,您必须使用process.env.DEBUG === "true"符号,因此将其替换为"false" === "true"类星体,然后将其作为不可访问的代码块以代码捆绑器的形式剥离。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从Quasar Framework获取环境变量

来自分类Dev

如何在docker-compose中设置环境变量

来自分类Dev

如何在Docker Compose中使用环境变量

来自分类Dev

如何从.env文件获取环境变量到docker-compose.yml?

来自分类Dev

如何获取正确的docker-compose多行环境变量格式?

来自分类Dev

如何从运行中获取环境变量

来自分类Dev

如何从minidump中获取环境变量?

来自分类Dev

如何从docker文件中获取环境变量

来自分类Dev

docker-compose-如何转义环境变量

来自分类Dev

如何在csproj文件中获取环境变量?

来自分类Dev

如何在 Spring Boot 的 yaml 中获取环境变量

来自分类Dev

如何在npm脚本中获取环境变量?

来自分类Dev

如何在实时Heroku测功机中获取环境变量

来自分类Java

如何在PropertyPlaceholderConfigurer中获取tomcat环境变量

来自分类Dev

如何在makefile中获取shell环境变量?

来自分类Dev

如何在Applescript中获取环境变量的值?

来自分类Dev

如何在MainApplication.java中获取环境变量

来自分类Dev

如何在 dockerfile 或 docker compose.yaml 中存储环境变量,其值是从部署它的操作系统中获取的?

来自分类Dev

如何在Dockerfile中使用docker-compose.yml中的环境变量?

来自分类Dev

如何在Docker Compose中从服务器设置环境变量?

来自分类Dev

如何在docker文件中获取对我可用的docker环境变量?(使用React / JS / webpack)

来自分类Dev

如何将本地文件中的值读取到Docker-compose环境变量中?

来自分类Dev

如何在docker-compose.yml的.env文件中使用环境变量?

来自分类Dev

如何在 docker-compose 健康检查上使用环境变量?

来自分类Dev

如何在生产中的 docker-compose 中使用环境变量?

来自分类Dev

如何将环境变量加载到docker-compose中?

来自分类Dev

如何以最少的停机时间在docker-compose容器中重新加载环境变量?

来自分类Dev

如何将docker-compose.yml中的环境变量设置为package.json?

来自分类Dev

如何使用create-react-app在docker-compose.yml中传递环境变量

Related 相关文章

  1. 1

    如何从Quasar Framework获取环境变量

  2. 2

    如何在docker-compose中设置环境变量

  3. 3

    如何在Docker Compose中使用环境变量

  4. 4

    如何从.env文件获取环境变量到docker-compose.yml?

  5. 5

    如何获取正确的docker-compose多行环境变量格式?

  6. 6

    如何从运行中获取环境变量

  7. 7

    如何从minidump中获取环境变量?

  8. 8

    如何从docker文件中获取环境变量

  9. 9

    docker-compose-如何转义环境变量

  10. 10

    如何在csproj文件中获取环境变量?

  11. 11

    如何在 Spring Boot 的 yaml 中获取环境变量

  12. 12

    如何在npm脚本中获取环境变量?

  13. 13

    如何在实时Heroku测功机中获取环境变量

  14. 14

    如何在PropertyPlaceholderConfigurer中获取tomcat环境变量

  15. 15

    如何在makefile中获取shell环境变量?

  16. 16

    如何在Applescript中获取环境变量的值?

  17. 17

    如何在MainApplication.java中获取环境变量

  18. 18

    如何在 dockerfile 或 docker compose.yaml 中存储环境变量,其值是从部署它的操作系统中获取的?

  19. 19

    如何在Dockerfile中使用docker-compose.yml中的环境变量?

  20. 20

    如何在Docker Compose中从服务器设置环境变量?

  21. 21

    如何在docker文件中获取对我可用的docker环境变量?(使用React / JS / webpack)

  22. 22

    如何将本地文件中的值读取到Docker-compose环境变量中?

  23. 23

    如何在docker-compose.yml的.env文件中使用环境变量?

  24. 24

    如何在 docker-compose 健康检查上使用环境变量?

  25. 25

    如何在生产中的 docker-compose 中使用环境变量?

  26. 26

    如何将环境变量加载到docker-compose中?

  27. 27

    如何以最少的停机时间在docker-compose容器中重新加载环境变量?

  28. 28

    如何将docker-compose.yml中的环境变量设置为package.json?

  29. 29

    如何使用create-react-app在docker-compose.yml中传递环境变量

热门标签

归档