【发布时间】:2019-06-08 22:47:56
【问题描述】:
我有一个问题。在我的主机/云解决方案中,我必须以这种方式使用每个国家/地区的定价环境变量(在他们的“环境变量”中定义)。
BASIC_PRICE_FR_PRODUCT = "50";
COMPLEX_PRICE_FR_PRODUCT = 100;
BASIC_PRICE_UK_PRODUCT = "37";
COMPLEX_PRICE_UK_PRODUCT = "200";
BASIC_PRICE_ES_PRODUCT = "75";
COMPLEX_PRICE_ES_PRODUCT = "300";
我可以访问那些使用 process.env.XXX 例如process.env.BASIC_PRICE_FR
正如您所见,这些环境变量取决于国家/地区,因为价格因国家/地区而异。
在我们的 node.js 应用程序中,挑战在于,当一个函数被执行时,它会自动识别国家,因此,我们可以(并且必须)使用“当前”国家和当前 country_iso_code(“fr”表示例如),因此我们必须使用与该国家/地区匹配的定价。
在阅读了一些关于“动态变量名”的帖子后,我尝试了如下所示的 eval、global[] 和 window[],但没有任何效果,所有输出“未定义”值
//note: iso_code_3166_we_can_use is something passed to the function by the final user or by some other lambda in the function context.
const current_country_iso_code_uppercase = iso_code_3166_we_can_use;
const basicPrice = parseInt( "process.env.BASIC_PRICE_" + current_country_iso_code_uppercase + "_PRODUCT")
console.log(basicPrice)//bug here as outputs "undefined"
编辑
使用 process.env['xxx'] 的建议不起作用,所以我在这里添加结果
console.log(process.env.BASIC_PRICE_FR_PRODUCT);//outputs 50
console.log('BASIC_PRICE_' + iso_code_uppercase + '_PRODUCT' );//just to be sure :): outputs BASIC_PRICE_FR_PRODUCT
console.log( process.env['BASIC_PRICE_' + iso_code_uppercase + '_PRODUCT'] );// DOES NOT WORK, outputs undefined
【问题讨论】:
-
你试过
process.env["BASIC_PRICE_" + current_country_iso_code_uppercase + "_PRODUCT"]吗? -
@Xufox 我现在就试试,不,我没有,我尝试了一些规避/复杂的东西......为什么我没有想到呢?如果有效,将更新
-
@Xufox 无效,请查看我的修改
-
如果您将所有六个变量分组到一个对象中是否有效,例如
PRODUCT_PRICES,然后使用process.env.PRODUCT_PRICES["BASIC_PRICE_" + current_country_iso_code_uppercase + "_PRODUCT"]?显然process.env有点……“special”。 -
更新:似乎正在进行 webpack 修复:github.com/webpack/webpack/pull/8721
标签: javascript node.js webpack