---
read_when:
    - Вы хотите узнать, что означает npm shrinkwrap в релизе OpenClaw
    - Вы проверяете файлы блокировки пакетов, изменения зависимостей или риски цепочки поставок
    - Вы проверяете корневые npm-пакеты или пакеты плагинов перед публикацией
summary: Объяснение простым и техническим языком использования npm shrinkwrap в релизах OpenClaw
title: фиксация зависимостей npm
x-i18n:
    generated_at: "2026-07-13T18:10:52Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 24
    provider: openai
    source_hash: d1e6c0d4541da9220d50cde0b9db064e5a91b81d6562cb16ac697de7d4017098
    source_path: gateway/security/shrinkwrap.md
    workflow: 16
---

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

```bash
# Все пакеты, управляемые 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
npm pack openclaw@<version> --json --pack-destination /tmp/openclaw-pack
tar -tf /tmp/openclaw-pack/openclaw-<version>.tgz | grep '^package/npm-shrinkwrap.json$'
```

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

```bash
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).
