Dynami c настройки в конфиге. json из среды - PullRequest
1 голос
/ 28 марта 2020

В моей конфигурации. json, у меня есть требование, чтобы объект настройки динамически заполнялся на основе установки переменной среды.

"somesetting": {
    "setting1": "%S1%",
    "setting2": "%S2%"
}

Моя среда Windows.

Многие примеры, с которыми я сталкивался, имеют жестко закодированные значения, и я не могу понять, как справиться со своим сценарием. Я очень новичок в npm и мире javascript. Любые советы / рекомендации в этом вопросе действительно приветствуются

Редактировать 2: Возможно, я пропустил это, но моя ситуация такова, что значения% S1% и% S2% могут отличаться в разные среды. Рассмотрим S1 и S2 как некоторые пути, которые могут различаться в зависимости от того, на какой машине мой код строится в облаке, например, C:\xyz или D:\xyz et c, которые я не знаю заранее. Таким образом, это означает, что у меня не может быть настройки c, даже если моя среда отличается. Спасибо

Ответы [ 3 ]

0 голосов
/ 28 марта 2020

JSON - это файл * stati c, а его содержимое представляет собой строку, поэтому здесь нельзя использовать переменные.

Вы можете попробовать переписать json файл через javascript, используя fs module readFile и writeFile.

Возможно, шаблоны двигателей, такие как Handlebars и Mustache, будут помочь вам сделать это намного проще.

Но обычно разработчики используют один файл stati c для одной среды. Вы можете изменить конфигурацию только перед запуском приложения, в противном случае вы можете сломать его во время выполнения (что очень плохо для ваших пользователей и клиентов).

Посмотрите на это https://www.npmjs.com/package/config Это * Конфигурация на основе 1032 *. Мы используем этот пакет в течение многих лет, и он подходит для нескольких сред.

Инфраструктура

config/
- default.json
- development.json
- staging.json
- production.json
app.js
*/

Использование

/*  default.json */
{
  "HTTP":  {
    "PORT": 3001,
    "MESSAGE": "Hello!"
  }
}
/*  development.json */
{
  "HTTP":  {
    "PORT": 4001
  }
}
/* app.js */
const config = require('config');

const message = config.get('HTTP.MESSAGE');
// "Hello!" (from default.json)

const port = config.get('HTTP.PORT');
// 4001 (from development.json, overrides 3001)
/* Windows */
set NODE_ENV=development& app.js

/* Linux */
NODE_ENV=development app.js

/* cross-platform */
cross-env NODE_ENV=development app.js
0 голосов
/ 28 марта 2020

Если я вас правильно понимаю, вы хотите использовать Windows переменные среды в вашем приложении Node.js, чтобы значения исходили из самой операционной системы / среды хоста, а не были жестко запрограммированы в файле конфигурации, который является нормальным требованием CICD. Windows Переменные среды будут доступны везде, где Node.js установлен по умолчанию. Вам не нужны никакие дополнительные пакеты. И системные, и пользовательские переменные среды будут доступны в Node.js среде процесса, process.env.whither. Например:

const setting1 = process.env.setting1
const setting2 = process.env.setting2

Однако вы не можете использовать их внутри файла. json, так как они представляют собой файлы c, как сказал @ max-starling. В этом случае я думаю, что файл конфигурации JavaScript имеет больше смысла.

Главное приложение. js

import config from './config'
console.log(config.setting1)

config. js

const somesetting = {
  setting1: process.env.setting1,
  setting2: process.env.setting2
}
module.exports = somesetting; 

Документы узла: https://nodejs.org/api/process.html#process_process_env

0 голосов
/ 28 марта 2020

dotenv - это общее решение для управления переменными среды в node.js.

Вы можете определить файл .env для каждой среды, в которой вы нуждаетесь. Затем обратитесь к ним как переменные среды узла .

В зависимости от вашего варианта использования вы можете использовать переменные среды для заполнения вашей конфигурации. json, или, возможно, вам вообще не понадобится файл конфигурации, и вы можете просто использовать переменные среды напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...