Формат
Формат це те, що містить бандл: маніфест. Цей розділ описує кожен його елемент, по одній сторінці на кожен.
Ви зустрічаєте його у двох місцях:
- У конфігурації.
manifest.artifacts,manifest.vars,cleanupіrulesзаписані саме в цьому форматі. - У бандлі. Якщо ви пишете власний читач або встановлювач, саме це ви розбираєте.
Цілий маніфест
{
"vars": { "root": "/games/pack" },
"artifacts": [
{
"path": "${root}/libraries/a/a-1.0.jar",
"source": { "url": "https://example.com/a-1.0.jar" },
"integrity": { "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" }
}
],
"launch": {
"command": "/usr/bin/java",
"workdir": "${root}",
"args": ["-cp", "${root}/libraries/a/a-1.0.jar", "com.example.Main"]
},
"cleanup": [{ "includes": ["${root}/mods/*.jar"] }]
}Елементи
Спочатку два будівельні блоки, бо все інше їх використовує:
| Елемент | Що це | Сторінка |
|---|---|---|
| Змінні | Іменовані значення і ${…} майже в кожному рядку. | Змінні |
| Правила | «Лише на Windows», «лише з увімкненим прапорцем». | Правила |
Далі частини маніфесту:
| Поле | Що це | Сторінка |
|---|---|---|
artifacts | Файли для встановлення. | Артефакти |
launch | Як запустити гру. | Запуск |
cleanup | Що видалити після встановлення. | Очищення |
Сторінки йдуть у порядку читання.
Кожне поле необов'язкове. Маніфест без launch можна встановити, але не запустити.
Формат має версію, 1. Вона не є полем маніфесту: її називає бандл, поруч із маніфестом.
Одне правило
Маніфест повністю складений. Кожен файл має одне точне джерело і, де воно існує, хеш. Ніщо не каже «останній».
Тому встановлювач нічого не вирішує. Якщо вашому треба щось шукати, помилка в тому, що зібрало маніфест.
Що робить встановлювач
У такому порядку:
- Обчислює змінні для цього комп'ютера.
- Перевіряє правила очищення і зупиняється, якщо одне небезпечне.
- Залишає ті артефакти, чиї правила проходять.
- Пропускає файли, що вже на диску з правильним хешем. Решту завантажує.
- Перевіряє завантажене.
- Розпаковує артефакти, що мають
extract. - Видаляє те, що називає
cleanup.
Стабільність
Формат це стабільна частина opys. Параметри пакетів, плагінів і прапорці командного рядка можуть змінюватися. Формат змінюється лише навмисно, і тоді число format зростає.
@opys/core це еталонна реалізація маніфесту (decodeManifest), а @opys/bundle файла, в якому він зберігається (readBundle, writeBundle).