Gateway

фиксация зависимостей npm

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 — это Gateway, среда выполнения плагинов, маршрутизатор моделей и среда выполнения агентов, поэтому установка по умолчанию влияет на время запуска, использование диска, загрузку нативных пакетов и подверженность рискам цепочки поставок. Shrinkwrap предоставляет стабильную границу для проверки выпуска: проверяющие видят изменения транзитивных зависимостей, валидаторы отклоняют непредвиденные изменения файла блокировки, а пакеты плагинов содержат собственный зафиксированный граф зависимостей вместо зависимости от корневого пакета.

Создание и проверка

Корневой npm-пакет openclaw, принадлежащие OpenClaw npm-пакеты плагинов (например, @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