Перейти до основного змісту
Версія: 11.x

Глобальні пакунки

Глобальні пакунки — це інструменти та утиліти командного рядка, які встановлюються для всієї системи за допомогою команди pnpm add -g. В pnpm v11, управління лобальними пакунками було змінено для досягнення кращої ізоляції та надійності.

Втсановлення глобальних пакунків

pnpm add -g <pkg>

Наприклад:

pnpm add -g typescript prettier eslint

Ізольоване встановлення

Кожен глобально встановлений пакунок (або група пакунків, встановлених разом) отримує власну ізольовану теку зі своїми package.json, node_modules/ та файлом блокування. Це запобігає взаємному впливу глобальних пакунків через конфлікти залежностей між одноранговими компонентами, через підняття змін або зміни у визначенні версій.

Ізольовані встановлення зберігаються в {pnpmHomeDir}/global/v11/{hash}/, де hash формується від набору пакунків встановлених разом.

Наприклад, виконання цих команд:

pnpm add -g typescript
pnpm add -g prettier

призведе до створення двох ізольованих встановлень для пакунків typescript та prettier, кожен з яких отримує своє власне дерево node_modules, що не впливатиме на розвʼязання залежностей один одного та інших пакунків.

Installing multiple packages in a single command groups them into one isolated install:

pnpm add -g eslint prettier

eslint and prettier share a node_modules tree and lockfile, so peer dependencies are resolved against each other. Removing either with pnpm remove -g removes the entire group.

Directory layout

The contents of {pnpmHomeDir}/global/v11/ look like:

{pnpmHomeDir}/global/v11/
├── {hash-A} → symlink → ./{hash-A-target}/
├── {hash-A-target}/ ← isolated install dir
│ ├── package.json ← lists the packages installed together
│ ├── pnpm-lock.yaml ← lockfile for this install group
│ └── node_modules/
│ ├── <pkg>/ ← top-level dep, symlinked into the global virtual store
│ └── .pnpm/
├── {hash-B} → symlink → ./{hash-B-target}/
├── {hash-B-target}/ ← another isolated install dir
└── store/ ← shared global virtual store
└── ...
  • The {hash} entries are symlinks; pnpm scans for them to enumerate active installs.
  • The targets are real directories that act as ordinary pnpm projects — each has its own package.json and lockfile.
  • The shared store/ directory holds the global virtual store. Each install group's direct dependencies — the entries at the root of its node_modules/ — are symlinks into that store, so the actual package contents are shared rather than copied per group.
  • Bin shims live in {pnpmHomeDir}/bin/ and point through the appropriate install group's node_modules.

When a package is removed or its install group is replaced, the hash symlink is updated and orphaned target directories are eventually cleaned up by pnpm store prune.

Listing global packages

pnpm list -g
pnpm list -g --json # machine-readable
pnpm list -g --parseable # paths only

Because each install group has its own lockfile, listing across multiple groups can only reliably aggregate the top-level packages they were installed with — transitive dependency trees from different groups can't be coherently merged. As a result:

  • pnpm list -g (default --depth=0) always works and shows every globally installed package.
  • pnpm list -g --depth=<n> (with n > 0) shows the full dependency tree only when:
    • there is just one global install group, or
    • a positional argument narrows the request to a single install group, e.g. pnpm list -g eslint --depth=1.

If --depth>0 is requested but the request can't be narrowed to a single install group, pnpm errors with ERR_PNPM_GLOBAL_LS_DEPTH_NOT_SUPPORTED.

Управління глобальними пакунками

КомандаОпис
pnpm add -g <pkg>Встановлює пакунок глобально
pnpm remove -g <pkg>Видаляє глобально встановлений пакунок (всю встановлену групу)
pnpm update -g [pkg]Оновлює глобально встановлені пакунки (перевстановлює їх в ізольовані теки)
pnpm list -gВиводить перелік глобально встановлених пакунків
нотатка

Команда pnpm install -g (без аргументів) не підтримується. Використовуйте pnpm add -g <pkg> для встановлення потрібних паккунків.

Розташування бінарних файлів

Глобально встановлені бінарні файли зберігаються у субтеці bin в PNPM_HOME (тобто в $PNPM_HOME/bin/). Це дозволяє теці PNPM_HOME залишатись охайною — внутрішні теки global/ та store/ не захаращують автодоповнення оболонки, коли тека PNPM_HOME є в змінній PATH.

Після оновлення до pnpm v11 виконайте pnpm setup для оновлення налаштувань вашої оболонки, щоб шлях $PNPM_HOME/bin був у вашому PATH.

Ви можете дізнатись шлях до глобальної теки bin наступним чином:

pnpm bin -g

Глобальне віртуальне сховище

Глобальні встановлення використовуються глобальне віртуальне сховище. Пакунки зберігаються в {storeDir}/links та спільно використовуються поміж глобальними встановленнями. Це дозволяє уникнути зайвих завантажень, коли кілька глобальних пакунків залежать від одних і тих самих бібліотек.

Реєстрація локальних пакунків як глобальних

Щоб зробити бінарні файли локального пакунка доступними для всієї системи, виконайте команду pnpm add -g . в теці вашого пакунка:

cd ~/projects/my-tool
pnpm add -g .

Виконання команти призведе до реєстрації компонентів теки bin пакунка для виклику з будь-якого місця у системі. Див. pnpm link для отримання додаткової інформації.

Ухваленя скриптів збірки

Глобальні пакунки, що містять скрипти збірки (наприклад, postinstall), потребують ухвалення. Коли ви встановлюєте глобальний пакунок, який потребує запуску скриптів збірки, pnpm інтерактивно запропонує вам ухвалити або відхилити збірку.

Ви також можете попередньо ухвалити збірки, використовуючи прапорець --allow-build:

pnpm add -g --allow-build=esbuild esbuild