У меня проблема. В моем решении для хоста / облака я должен использовать переменные среды ценообразования для каждой страны таким образом, определенные в их «Переменных среды»).
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»), и при этом мы должны использовать цены, соответствующие этой стране.
Прочитав на SO несколько сообщений о «именах динамических переменных», я попробовал eval, global [] и window [], как показано ниже, но ни одна из них не работает, и все выдают значения «undefined»
//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.info(basicPrice)//bug here as outputs "undefined"
РЕДАКТИРОВАТЬ
Предложение использовать process.env ['xxx'] не сработало, поэтому я добавляю сюда результаты
console.info(process.env.BASIC_PRICE_FR_PRODUCT);//outputs 50
console.info('BASIC_PRICE_' + iso_code_uppercase + '_PRODUCT' );//just to be sure :): outputs BASIC_PRICE_FR_PRODUCT
console.info( process.env['BASIC_PRICE_' + iso_code_uppercase + '_PRODUCT'] );// DOES NOT WORK, outputs undefined
@Xufox, я попробую сейчас, нет, я пробовал некоторые обходные / сложные вещи ... почему я не подумал об этом? обновится, если он работает
@Xufox не работал, см. Мои правки
Работает ли это, если вы группируете все шесть переменных в один объект, например PRODUCT_PRICES, то использовать process.env.PRODUCT_PRICES["BASIC_PRICE_" + current_country_iso_code_uppercase + "_PRODUCT"]? Видимо process.env - это немного… "специальный".
@Xufox, я постараюсь найти другое решение, поскольку это было приведено в качестве примера, у меня может быть 200 для группировки, и это очень сложно поддерживать для каждой новой страны / цены. Я хотел «динамически» достичь набора переменных среды.
@Xufox, но я думаю, что вы правы, проблема должна быть в webpack process.env и ошибка со статическими xpressions, я добавил тег «webpack» в свой вопрос
Это не дубликат, поскольку, похоже, это проблема, специфичная для динамического доступа к переменным process.env, как отмечает @Xufox.
ОБНОВЛЕНИЕ: похоже, что исправление веб-пакета выполняется: github.com/webpack/webpack/pull/8721
process.env['BASIC_PRICE_' + iso_code_uppercase + '_PRODUCT'] должен работать на сервере, так что вы можете его получить.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте [] для динамического доступа к свойству объекта:
var country = 'FR'
var price = process.env['BASIC_PRICE_' + country + '_PRODUCT']
пробовал, но не сработало. Я добавил то, что он вывел, в свой вопрос ИЗМЕНИТЬ
//Create an empty dictionary,
var process_env_dict = {};
process_env_dict['env'] = process.env;
//then you can access it with the below statement as you expected
var result = JSON.parse(JSON.stringify(process_env_dict))['env']['BASIC_PRICE_' + country + '_PRODUCT'];
Вы пробовали
process.env["BASIC_PRICE_" + current_country_iso_code_uppercase + "_PRODUCT"]?