# Рендеринг конфигурации Pkl

Вычислите файл `.pkl` или `.pcf` напрямую и отправьте результат рендеринга в stdout. Так
можно генерировать конфигурацию приложения, передавать её инструментам развёртывания или проверять конфигурацию перед
коммитом. Проект Elide не требуется.

## Генерация JSON или YAML

Начните с `config.pkl`:

```pkl
service = "api"
port = 8080
```

Выберите формат, который читает ваше приложение, и перенаправьте результат в файл:

```shell
elide --format=json config.pkl > config.json
elide --format=yaml config.pkl > config.yaml
```

Вывод JSON содержит `service` и `port` с теми же значениями и типами. Явная команда `run` тоже работает:

```shell
elide run --format json config.pkl
```

Входные файлы `.pkl` и `.pcf` принимают одни и те же параметры. Например, преобразуйте существующую конфигурацию PCF в
JSON:

```shell
elide --format=json config.pcf > config.json
```

## Выбор формата вывода

| Параметр | Вывод | Типичное применение |
| --- | --- | --- |
| `--format=json` | JSON | Настройки приложений и инструменты, читающие JSON |
| `--format=yaml` | YAML | Конфигурация развёртывания |
| `--format=pcf` | Pkl Configuration Format | Просмотр вычисленной конфигурации в нотации Pkl |
| Без `--format` | Настроенный вывод модуля; по умолчанию PCF | Соблюдение собственного определения вывода модуля |

Вывод TOML не поддерживается. Неподдерживаемый формат завершается с кодом выхода `2`.

## Общая конфигурация для нескольких файлов

Относительные импорты разрешаются от входного файла, поэтому конфигурация может переиспользовать соседние значения по
умолчанию, даже если её вызывают из другого каталога. Например, положите `defaults.pkl` и `config.pkl` вместе в
`config/`:

```pkl
// defaults.pkl
port = 8080
```

```pkl
// config.pkl
import "defaults.pkl"

service = "api"
port = defaults.port
```

Из корня репозитория отрисуйте конфигурацию командой:

```shell
elide --format=json config/config.pkl
```

## Использование вывода в скриптах и CI

Stdout содержит только отрисованный документ; диагностика и ошибки вычисления идут в stderr. Для перенаправления или
конвейеров флаг `--quiet` не нужен. Например, при установленном `jq` посмотрите значение свойства:

```shell
elide --format=json config.pkl | jq '.port'
```

Манифест проекта отрисовывается так же — так видна его полностью вычисленная конфигурация вместе со значениями по
умолчанию:

```shell
elide --format=json elide.pkl | jq '.dependencies'
```

Ошибка вычисления завершается с кодом `1` и не записывает отрисованное содержимое в stdout. Чтобы обновить файл
атомарно, используйте `--out` вместо перенаправления оболочки:

```shell
elide --format=json --out config.json config.pkl
```

`--out config.json` записывает временный файл в целевой каталог и атомарно заменяет `config.json` только после
успешного вычисления и записи. При ошибке существующий файл не меняется, а код выхода ненулевой. Целевой каталог должен
существовать и поддерживать атомарную замену. Относительные пути разрешаются от рабочего каталога.

Используйте `--out -`, чтобы явно выбрать stdout:

```shell
elide --format=json --out - config.pkl
```

Отрисовка документов отклоняет `--sandbox` и `--limit`; эти средства управления выполнением к этой команде не
относятся. Все параметры команды см. в [справочнике CLI](/docs/cli-references). Как читать README или ранбук в том же
терминале, см. в разделе [Markdown в терминале](/docs/terminal-markdown).
