# Рендеринг конфігурації 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).
