【发布时间】:2021-12-22 21:16:35
【问题描述】:
相关:
- https://github.com/meteor/meteor/issues/11287
- how to use environment variable in client and server at the very beginning
我也知道METEOR_SETTINGS。
我有一个 Meteor 应用程序,它将为具有不同主题/功能的不同客户端部署。我想使用诸如process.env.CLIENT 之类的环境变量并使用if(process.env.CLIENT === 'foo') 之类的代码。在构建期间,应该替换 env 变量,并且死代码消除将删除/剥离 if 块。这已经适用于NODE_ENV。
我不想发布某个客户端不需要的代码,也不想隐式公开其他客户端的列表。如果我在运行时检查Meteor.settings,这两件事都会发生。我需要在编译时发生这种情况。每个客户端都有不同的构建。
如何将环境变量传递给客户端?其他人是如何解决这个问题的?客户端上的process.env目前是:
{"NODE_ENV":"development","TEST_METADATA":"{}"}
在其他构建工具中,我可以访问客户端上的所有环境变量,也可以访问具有特殊前缀(出于安全原因)的环境变量,例如 FOO_。
【问题讨论】:
-
为什么不能使用方法来获取
METEOR_SETTING?您可以在客户端调用Meteor.startup中的方法,使其在其他任何操作之前运行。 -
如果您要进行不同的构建,为什么不使用 bash 脚本将“变量”替换为硬编码值。大致就是这样,例如,webpack 也是这样做的。
-
Meteor 设置正是为您为不同的部署分配不同的
settings.json而构建的。使用mup,您可以轻松管理它,因为每个部署都有一个文件夹,其中包含一个 mup 设置和一个 settings.json。这就是我们将同一应用的多个实例部署到不同客户的方式。 -
@Jankapunkt 我一定遗漏了有关 Meteor 设置的一些内容:我需要在 编译时 删除一些东西,这就是我的回答所做的(以及我已经在做的)在非 Meteor 项目中)。我知道我可以为每个构建使用 Meteor 设置来在 runtime 进行配置。您能否发布如何将 Meteor 设置集成到构建过程中的答案?
-
它只是部署文件夹中的一个 JSON 文件,因此您可以在任何阶段随意转换它。
mup还允许为此编写钩子,因此不需要 babel、webpack 等。由于您的部署文件夹中有不同的设置文件,因此它也不会修改您的开发设置文件。
标签: meteor