Как получить environment variable сначала на сервере, а потом вывести на клиенте?

С метеором совсем не работал и с node.js опыта нет, буду только познавать. Но работу делать нужно и в связи с эти хотел посоветоваться. Учусь походу))) Проблема заключается в том, что у меня есть глобальная переменная NODE_ENV=production которую нужно получить на сервере, а потом вывести на клиенте для того что бы сделать проверку это продакшн или нет. Ход моих мыслей таков

  1. сначала я задаю переменную NODE_ENV=production
  2. потом что бы получить ее на сервере я пишу следующее var devEnv = process.env.NODE_ENV
  3. и теперь вот думаю как мне devEnv вывести на клиенте в скрипте что бы осуществить проверку на то, в какой среде работает приложение.
    Спасибо Всем кто направит в правильное русло по этой задаче!!!

Тебе критично задавать продакшен или дев через env переменную?


У метеора есть встроенный механизм отличения метеора запущенного в проде и в девелопменте: когда метеор запущен без флага --production, значения Meteor.isProduction === false и Meteor.isDevelopment === true. Для метеора, запущенного из бандла или локально с флагом --production эти значения соответственно противоположные. https://docs.meteor.com/api/core.html#Meteor-isDevelopment


Плюс есть механизм запуска метеора с разным конфигурациями (я использую его для того чтобы иметь разные ключи для oauth на локальном домене и продакшене). Для этого

Создаешь json файл в private/dev.config.json. Пример моего:

{
  "twitterOauth": {
    "consumerKey": "ppp",
    "secret": "kkk" 
  }
}

Запускаешь метеор с флагом --settings. Я храню скрипт запуска в package.json, чтобы запускать метеор так: npm run dev. Пример package.json:

{
  "version": "0.1.0",
  "name": "ppp",
  "private": true,
  "scripts": {
    "dev": "meteor run --settings ./private/dev.config.json",

Доступаешься к значениям так: Meteor.settings['twitterOauth']['consumerKey']. Для продакшена соответственно имеешь другой файл, который указываешь при деплойменте.


И в общем виде решение будет через в виде передачи значения через коллекцию. Если не знаешь как - отпишись, я распишу. Но сами авторы фреймверка рекомендуют использовать файл настроек: https://guide.meteor.com/deployment.html#environment

2 лайка

Наверное предложеный вариант самый оптимальный в виде передачи значения через коллекцию. Если будет не сложно, можно пожалуйста обьяснить что к чему? Расскажу подробнее: у нас есть проект который запускается через докер и есть 4 файла.yaml (dev, prod, demo, qa). Вот мы изначально хотели в эти 4 файла вписать глобальные переменные и что бы при билде мы определяли среду работы приложения. Мы это делаем для того что бы отключать гугл аналитикс везде кроме продакшн. С самого начало было такое решение этой проблемы, я брал домен из config/JSON файла с помощью Meteor.settings.siteDomain и делал проверку, но мне сказали что это костыльное решение=(

В конечном итоге мною было использовано решение которое заключается в виде передачи значения через коллекцию. Хочу рассказать поэтапно что я сделал, да бы понять ничего ли я не упустил:

  1. Я в папке config создал файл settings.json, в котором я в public поместил “env”
    “public”: {
    “siteDomain”: “/////////”,
    env”: “development”,
    “ga”: {
    “account”: “/////////”
    }
    Вот хорошая статья которая многое обьясняет: https://themeteorchef.com/tutorials/making-use-of-settings-json
  2. потом я вызываю meteor --settings config/settings.json
  3. и в конечном итоге на клиенте использую Meteor.settings.public.env
  4. Но мне нужно будет еще в Jenkins поменять скрипт, который будет формировать этот файл json c разными значениями для env . Будет или production или development или qa или demo

Спасибо за помощь!!!