> ## Documentation Index
> Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# фиксация зависимостей 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`](https://docs2.openclaw.ai/ru/reference/openclaw-ai), включают `npm-shrinkwrap.json` при публикации. Зависимости рабочего пространства исключаются из корневого shrinkwrap, поскольку публикуются вместе с корневым пакетом; вместо этого каждый публикуемый пакет рабочего пространства фиксирует собственное дерево транзитивных зависимостей. Подходящие пакеты плагинов также могут публиковаться с явными `bundledDependencies`, включая файлы зависимостей среды выполнения в tar-архив плагина вместо того, чтобы полагаться только на разрешение зависимостей во время установки.

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
# Все пакеты, управляемые shrinkwrap (корневой пакет + публикуемые плагины)
pnpm deps:shrinkwrap:generate
pnpm deps:shrinkwrap:check

# Только корневой пакет
pnpm deps:shrinkwrap:root:generate
pnpm deps:shrinkwrap:root:check

# Только пакеты, затронутые текущим набором изменений
pnpm deps:shrinkwrap:changed:generate
pnpm 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 theme={"theme":{"light":"min-light","dark":"min-dark"}}
npm pack openclaw@<version> --json --pack-destination /tmp/openclaw-pack
tar -tf /tmp/openclaw-pack/openclaw-<version>.tgz | grep '^package/npm-shrinkwrap.json$'
```

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

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
npm pack @openclaw/discord@<version> --json --pack-destination /tmp/openclaw-plugin-pack
tar -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](https://docs.npmjs.com/cli/v11/configuring-npm/npm-shrinkwrap-json).
