---
read_when:
    - Ви хочете дізнатися, що означає npm shrinkwrap у випуску OpenClaw
    - Ви перевіряєте файли блокування пакетів, зміни залежностей або ризики ланцюга постачання
    - Ви перевіряєте кореневі npm-пакети або npm-пакети плагінів перед публікацією
summary: Просте й технічне пояснення npm shrinkwrap у випусках OpenClaw
title: npm shrinkwrap
x-i18n:
    generated_at: "2026-07-12T13:20:28Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    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 — це шлюз, хост плагінів, маршрутизатор моделей і середовище виконання агентів, тому типове встановлення впливає на час запуску, використання диска, завантаження нативних пакетів і ризики ланцюга постачання. Shrinkwrap надає перевірці випуску стабільну межу: рецензенти бачать зміни транзитивних залежностей, засоби перевірки відхиляють неочікуване розходження файлу фіксації, а пакети плагінів містять власний зафіксований граф залежностей замість покладання на кореневий пакет.

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

Кореневий npm-пакет `openclaw`, npm-пакети плагінів, що належать OpenClaw (наприклад, `@openclaw/discord`), і придатні для публікації пакети робочого простору, як-от [`@openclaw/ai`](/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).
