Security News
ESLint is Now Language-Agnostic: Linting JSON, Markdown, and Beyond
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
@tramvai/module-environment
Advanced tools
Модуль env используется для получения глобальных параметров исполнения приложений в рантайме и передачи этих параметров клиенту. С заранее составленными списком используемых переменных приложением, динамически расширением и валидацией при старте приложени
Модуль env используется для получения глобальных параметров исполнения приложений в рантайме и передачи этих параметров клиенту. С заранее составленными списком используемых переменных приложением, динамически расширением и валидацией при старте приложения
Уже поставляется внутри @tramvai/module-common и не нужно устанавливать, если подключен module-common.
Иначе, нужно установить @tramvai/module-environment
Все используемые параметры в приложения регистрируются с помощью реализации в DI токена ENV_USED_TOKEN
и предполагается, что каждый модуль по отдельности регистрирует только те ENV параметры, которые ему необходимы. В таком случае при подключении модуля, будет автоматическая валидация всех переданных параметров, которые необходимы для работы приложения
import { provide } from '@tramvai/core';
@Module({
providers: [
provide({
provide: ENV_USED_TOKEN,
useValue: [
{ key: 'DEBUG_MODULE', optional: true },
{ key: 'DEBUG_MODULE_URL', optional: true },
],
multi: true,
}),
],
})
export class MyModule {}
В выше примере, модуль регистрирует несколько env токенов, которые будут проинициализированы и будут доступны в environmentManager.get('DEBUG_MODULE')
. При этом, был передан параметр optional
который указывает, что переменные не обязательные для работы приложения.
При старте приложения происходит проверка тех токенов, которые были зарегистрированы в DI и были переданы в ENV при запуске. Если в приложение не были переданы все требуемые ENV переменные, то приложение упадет.
Так-же есть возможность написать валидаторы для ENV значений, которые запустятся при инициализации приложения.
import { provide } from '@tramvai/core';
@Module({
providers: [
provide({
provide: ENV_USED_TOKEN,
useValue: [
{
key: 'MY_ENV',
validator: (env) => {
if (!env.includes('https')) {
return 'Не правильный формат ссылки. Ссылка должна содержать https';
}
},
},
],
multi: true,
}),
],
})
export class MyModule {}
Все ENV переменные будут доступны как на сервере, так и браузере без каких либо дополнительных действий и настроек. В браузер автоматически передаются env переменные, которые имеют dehydrate: true
Так-как есть возможность перезаписывать значения переменных, то переменные заменятся по определенным правилам
Правила замены, расположены в порядке приоритета, от меньшего к высокому:
{ key: 'ENV_PARAM', value: 'env value' }
env.development.js
MY_ENV=j node server.js
@inline ../../tokens/common/src/env.ts
Допустим мы зарегистрировали используемый ENV параметр CONFIG_API
с помощью токена ENV_USED_TOKEN
, теперь в приложении нужно подключить environmentManager и прочитать данные
import { provide } from '@tramvai/core';
@Module({
providers: [
provide({
provide: 'MY_SERVICE',
useClass: class MyService {
constructor({ environmentManager }) {
console.log(environmentManager.get('CONFIG_API'));
}
},
deps: {
environmentManager: ENV_MANAGER_TOKEN,
},
}),
],
})
export class MyModule {}
Этот код будет работать как на сервере, так и в браузере
Для этого создайте файл env.development.js
в корне проекта и пропишите все ENV переменные для приложения. При инициализации приложения, будет прочитан этот файл.
Приложение двенадцати факторов хранит конфигурацию в переменных окружения, поэтому по умолчанию при process.env.NODE_ENV === 'production'
EnvironmentManger не будет считывать файл env.development.js
.
Если же необходимо локально протестировать приложение с NODE_ENV=production
, можно передать флаг DANGEROUS_UNSAFE_ENV_FILES='true'
чтобы EnvironmentManger прочитал файл env.development.js
и не пришлось вводить все переменные руками.
Для этого при запуске приложения передайте ENV параметры. Например в Docker можно это сделать через параметр -e docker run -e MY_ENV_VAR=/ my-image
FAQs
The env module is used to retrieve global application environment variables in runtime and pass these parameters to the client. With a pre-defined list of variables used by the application, dynamically extended and validated at application startup
The npm package @tramvai/module-environment receives a total of 2,206 weekly downloads. As such, @tramvai/module-environment popularity was classified as popular.
We found that @tramvai/module-environment demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
Security News
Members Hub is conducting large-scale campaigns to artificially boost Discord server metrics, undermining community trust and platform integrity.
Security News
NIST has failed to meet its self-imposed deadline of clearing the NVD's backlog by the end of the fiscal year. Meanwhile, CVE's awaiting analysis have increased by 33% since June.