Gateway

npm shrinkwrap

У вихідних робочих копіях OpenClaw використовується pnpm-lock.yaml. Опубліковані npm-пакети OpenClaw використовують npm-shrinkwrap.json — придатний для публікації файл фіксації залежностей npm, завдяки якому під час установлення пакетів використовується граф залежностей, перевірений у процесі випуску.

Чому це важливо

Shrinkwrap — це відбиток дерева залежностей, яке постачається з npm-пакетом: він указує npm, які саме транзитивні версії встановлювати.

Файл Де він має значення Що він означає
pnpm-lock.yaml Вихідна робоча копія OpenClaw Граф залежностей для супровідників
npm-shrinkwrap.json Опублікований npm-пакет Граф установлення npm для користувачів
package-lock.json Локальні застосунки npm Не є контрактом публікації OpenClaw

Для випусків OpenClaw це означає:

  • опублікований пакет не просить npm створювати новий граф залежностей під час установлення;
  • зміни залежностей можна перевіряти, оскільки вони потрапляють у різницю файлу фіксації;
  • під час перевірки випуску тестується той самий граф, який установлюватимуть користувачі;
  • несподівані зміни розміру пакета або нативних залежностей виявляються до публікації.

Shrinkwrap — не пісочниця. Він сам по собі не робить залежність безпечною та не замінює ізоляцію хоста, openclaw security audit, перевірку походження пакетів або димові тести встановлення.

OpenClaw — це шлюз, хост плагінів, маршрутизатор моделей і середовище виконання агентів, тому типове встановлення впливає на час запуску, використання диска, завантаження нативних пакетів і ризики ланцюга постачання. Shrinkwrap надає перевірці випуску стабільну межу: рецензенти бачать зміни транзитивних залежностей, засоби перевірки відхиляють неочікуване розходження файлу фіксації, а пакети плагінів містять власний зафіксований граф залежностей замість покладання на кореневий пакет.

Генерування та перевірка

Кореневий npm-пакет openclaw, npm-пакети плагінів, що належать OpenClaw (наприклад, @openclaw/discord), і придатні для публікації пакети робочого простору, як-от @openclaw/ai, під час публікації містять npm-shrinkwrap.json. Залежності робочого простору не включаються до кореневого shrinkwrap, оскільки публікуються разом із кореневим пакетом; натомість кожен придатний для публікації пакет робочого простору фіксує власне транзитивне дерево. Відповідні пакети плагінів також можуть публікуватися з явно визначеними bundledDependencies, додаючи файли залежностей середовища виконання до tar-архіву плагіна замість того, щоб покладатися лише на їх визначення під час установлення.

bash
# Усі пакети, керовані shrinkwrap (кореневий + придатні для публікації плагіни)pnpm deps:shrinkwrap:generatepnpm deps:shrinkwrap:check # Лише кореневий пакетpnpm deps:shrinkwrap:root:generatepnpm deps:shrinkwrap:root:check # Лише пакети, яких стосується поточний набір змінpnpm deps:shrinkwrap:changed:generatepnpm deps:shrinkwrap:changed:check

Генератор формує придатний для публікації формат файлу фіксації npm, але відхиляє згенеровані версії пакетів, яких ще немає в pnpm-lock.yaml. Це зберігає встановлені pnpm межі перевірки давності залежностей, перевизначень і виправлень.

Перевіряйте наведене нижче як чутливе з погляду безпеки:

  • pnpm-lock.yaml
  • npm-shrinkwrap.json
  • вміст залежностей, включених до плагінів
  • будь-яку різницю package-lock.json

Засоби перевірки пакетів OpenClaw вимагають наявності shrinkwrap у нових tar-архівах кореневого пакета та відхиляють package-lock.json для опублікованих пакетів. Шлях публікації npm-плагіна перевіряє локальний shrinkwrap плагіна, встановлює локальні для пакета включені залежності, а потім пакує або публікує його.

Перевірка опублікованого пакета

Кореневий пакет:

bash
npm pack openclaw@<version> --json --pack-destination /tmp/openclaw-packtar -tf /tmp/openclaw-pack/openclaw-<version>.tgz | grep '^package/npm-shrinkwrap.json$'

Пакет плагіна:

bash
npm pack @openclaw/discord@<version> --json --pack-destination /tmp/openclaw-plugin-packtar -tf /tmp/openclaw-plugin-pack/openclaw-discord-<version>.tgz | grep '^package/npm-shrinkwrap.json$'tar -tf /tmp/openclaw-plugin-pack/openclaw-discord-<version>.tgz | grep '^package/node_modules/'

Довідкова інформація: npm-shrinkwrap.json.

Was this useful?
On this page

On this page