10 KiB
| read_when | sidebarTitle | summary | title | x-i18n | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Dependencies | Як OpenClaw встановлює пакети Plugin і розв’язує залежності Plugin | Розв’язання залежностей Plugin |
|
Вирішення залежностей Plugin
OpenClaw виконує роботу із залежностями Plugin під час встановлення/оновлення. Завантаження під час виконання не запускає менеджери пакетів, не відновлює дерева залежностей і не змінює каталог пакета OpenClaw.
Розподіл відповідальності
Пакети Plugin відповідають за власний граф залежностей:
- залежності часу виконання містяться в
dependenciesабоoptionalDependenciesпакета Plugin - імпорти SDK/ядра є peer-імпортами або імпортами, наданими OpenClaw
- локальні плагіни для розробки постачаються з уже встановленими власними залежностями
- npm- і git-плагіни встановлюються в корені пакетів, якими керує OpenClaw
OpenClaw відповідає лише за життєвий цикл Plugin:
- виявити джерело Plugin
- встановити або оновити пакет за явним запитом
- записати метадані встановлення
- завантажити точку входу Plugin
- завершити з дієвою помилкою, коли залежності відсутні
Корені встановлення
OpenClaw використовує стабільні корені для кожного джерела:
- пакети npm встановлюються в
~/.openclaw/npm - пакети git клонуються в
~/.openclaw/git - локальні/path/archive-встановлення копіюються або посилаються без відновлення залежностей
npm-встановлення виконуються в корені npm за допомогою:
npm install --prefix ~/.openclaw/npm <spec> --omit=dev --ignore-scripts --no-audit --no-fund
npm може підіймати транзитивні залежності в ~/.openclaw/npm/node_modules поряд
із пакетом Plugin. OpenClaw сканує керований корінь npm перед тим, як довіряти
встановленню, і використовує npm для видалення керованих npm пакетів під час деінсталяції, тож підняті
залежності часу виконання залишаються в межах керованого очищення.
git-встановлення клонують або оновлюють репозиторій, а потім виконують:
npm install --omit=dev --ignore-scripts --no-audit --no-fund
Після цього встановлений Plugin завантажується з каталогу цього пакета, тож розв’язання
пакетних локальних і батьківських node_modules працює так само, як для звичайного
пакета Node.
Локальні плагіни
Локальні плагіни розглядаються як каталоги, контрольовані розробником. OpenClaw не
виконує для них npm install, pnpm install або відновлення залежностей. Якщо локальний
Plugin має залежності, установіть їх у цьому Plugin перед його завантаженням.
Сторонні локальні плагіни TypeScript можуть використовувати аварійний шлях Jiti. Пакетовані плагіни JavaScript і вбудовані внутрішні плагіни завантажуються через нативний import/require замість Jiti.
Запуск і перезавантаження
Запуск Gateway і перезавантаження конфігурації ніколи не встановлюють залежності Plugin. Вони читають записи встановлення Plugin, обчислюють точку входу й завантажують її.
Якщо залежність відсутня під час виконання, Plugin не завантажується, а помилка має вказати оператору на явне виправлення:
openclaw plugins update <id>
openclaw plugins install <source>
openclaw doctor --fix
doctor --fix може очистити застарілий стан залежностей, згенерований OpenClaw, і відновити
завантажувані плагіни, яких немає в локальних записах встановлення, коли конфігурація
посилається на них. Doctor не відновлює залежності для вже встановленого
локального Plugin.
Вбудовані плагіни
Легкі й критично важливі для ядра вбудовані плагіни постачаються як частина OpenClaw. Вони або не повинні мати важкого дерева залежностей часу виконання, або мають бути винесені в завантажуваний пакет на ClawHub/npm.
Поточний згенерований список плагінів, які постачаються в пакеті ядра, встановлюються зовні або залишаються лише вихідним кодом, див. у Інвентарі Plugin.
Маніфести вбудованих Plugin не повинні запитувати підготовку залежностей. Велика або необов’язкова функціональність Plugin має пакуватися як звичайний Plugin і встановлюватися через той самий шлях npm/git/ClawHub, що й сторонні плагіни.
У checkout вихідного коду OpenClaw розглядає репозиторій як pnpm-монорепозиторій. Після
pnpm install вбудовані плагіни завантажуються з extensions/<id>, тому пакетні локальні
workspace-залежності доступні, а зміни підхоплюються напряму. Розробка в checkout вихідного коду
підтримується лише з pnpm; звичайний npm install у корені репозиторію не є
підтримуваним способом підготувати залежності вбудованих Plugin.
| Форма встановлення | Розташування вбудованого Plugin | Власник залежностей |
|---|---|---|
npm install -g openclaw |
Зібране дерево часу виконання всередині пакета | Пакет OpenClaw і явні потоки встановлення/оновлення/doctor для Plugin |
Git checkout плюс pnpm install |
Workspace-пакети extensions/<id> |
pnpm workspace, включно з власними залежностями кожного пакета Plugin |
openclaw plugins install ... |
Керований корінь Plugin npm/git/ClawHub | Потік встановлення/оновлення Plugin |
Очищення застарілого стану
Старіші версії OpenClaw генерували корені залежностей вбудованих Plugin під час запуску або
під час відновлення doctor. Поточне очищення doctor видаляє ці застарілі каталоги та
символічні посилання, коли використовується --fix, включно зі старими коренями plugin-runtime-deps, глобальними
символічними посиланнями пакетів із префіксом Node, які вказують на обрізані цілі plugin-runtime-deps,
маніфестами .openclaw-runtime-deps*, згенерованими Plugin node_modules, каталогами
етапу встановлення та пакетними локальними сховищами pnpm. Пакетований postinstall також
видаляє ці глобальні символічні посилання перед обрізанням застарілих цільових коренів, щоб оновлення
не залишали завислих імпортів пакетів ESM.
Ці шляхи є лише застарілими залишками. Нові встановлення не повинні їх створювати.