Как управлять различными конфигурационными средами в nestjs - PullRequest
3 голосов
/ 25 апреля 2020

Мне бы хотелось иметь несколько сред, скажем, development, production, test. Эти среды должны быть независимыми и использовать свой собственный набор параметров конфигурации, например, для DB, SERVER_PORT, USER и c. Их не должно быть в базе кода, поэтому я думаю, что они должны быть разными .env файлами. То есть я должен иметь возможность загружать разные файлы .env в зависимости от того, какая среда активна. Кроме того, неясно, где я должен установить этот переключатель env.

Может быть, это должен быть один файл .env с параметром NODE_ENV, в качестве параметра можно указать любое из вышеупомянутых значений, что разработка, производство или испытание. И в зависимости от значения этого параметра автоматически загружается необходимый набор параметров конфигурации.

Я прочитал документацию, в настоящий момент меня это немного смущает.

Похоже, должна быть какая-то фабрика конфигурации.

Ответы [ 2 ]

3 голосов
/ 26 апреля 2020

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

. В любом случае, действительно важно то, как вы организовываете ваши файлы .env. Предполагается, что файлы Env содержат учетные данные базы данных, секрет шифрования и много конфиденциальных данных, поэтому не очень хорошая идея помещать их в систему контроля версий. Вместо этого вам следует хранить файл .env в системе. На рабочем сервере будет файл .env с секретами производства, на сервере разработчика может быть файл .env с локальными секретами. Флаг .env игнорируется git. Таким образом, вам не придется вносить изменения в зависимости от среды, она автоматически примет правильную конфигурацию в зависимости от того, какой сервер вы развертываете.

1 голос
/ 26 апреля 2020

Существует два подхода к этому варианту использования.

1.создать .prod.env, .development.env, .test.env и загрузить требуемый env следующим образом.

ConfigModule.forRoot({envFilePath: '.development.env'});

2. создать конфигурацию из функции

export default () => ({
  port: parseInt(process.env.PORT, 10) || 3000,
  database: {
    host: process.env.DATABASE_HOST,
    port: parseInt(process.env.DATABASE_PORT, 10) || 5432
  }
});

и использовать

@Module({
  imports: [
    ConfigModule.forRoot({
      load: [configuration],
    }),
  ],
})

подробнее здесь

...