Воркспейсы
pnpm имеет встроенную поддержку монорепозиториев (multi-package репозиториев, multi-project репозиториев или монолитных репозиториев). Можно создать рабочую область для объединения нескольких проектов в одном репозитории.
Рабочая область должна иметь файл pnpm-workspace.yaml в корневом каталоге. Рабочая область также может иметь .npmrc в корне.
Если вы изучаете управление монорепозиторием, вы также можете заглянуть в Bit. Bit использует pnpm под капотом, но автоматизирует многие вещи, которые в настоящее время выполняются вручную в традиционной рабочей области, управляемой pnpm/npm/Yarn. There's an article about bit install that talks about it: Painless Monorepo Dependency Management with Bit.
Протокол рабочей области (workspace:)
If link-workspace-packages is set to true, pnpm will link packages from the workspace if the available packages match the declared ranges. Например, foo@1.0.0 связывается с bar если bar имеет в своих зависимостях "foo": "^1.0.0" и foo@1.0.0 находится в рабочей области. Однако, если bar имеет "foo": "2.0.0" в зависимостях и foo@2.0.0 не находится в рабочей области, foo@2.0.0 будет установлен из реестра. Такое поведение вносит некоторую неопределенность.
К счастью, pnpm поддерживает протокол workspace:. Когда используется этот протокол, pnpm откажется разрешать что-либо, кроме пакета локальной рабочей области. Итак, если вы установите "foo": "workspace:2.0.0", на этот раз установка завершится ошибкой, поскольку "foo@2.0.0" отсутствует в рабочей области.
Этот протокол особенно полезен, когда для параметра link-workspace-packages установлено значение false. В этом случае pnpm будет связывать пакеты из рабочей области только, если используется протокол workspace:.
Ссылки на пакеты рабочей области через псевдонимы
Допустим, у вас есть пакет в рабочей области с именем foo. Обычно вы бы сослались на него как "foo": "workspace:*".
Если вы хотите использовать другой псевдоним, следующий синтаксис также будет работать: "bar": "workspace:foo@*".
Перед публикацией псевдонимы конвертируются в обычные алиасные зависимости. Приведенный выше пример станет следующим: "bar": "npm:foo@1.0.0".
Ссылка на пакеты рабочей области через их относительный путь
В рабочей области с 2 пакетами:
+ packages
    + foo
    + bar
bar может иметь foo в своих зависимостях, объявленных как "foo": "workspace:../foo". Перед публикацией эти спецификации преобразуются в спецификации обычных версии, поддерживаемые всеми менеджерами пакетов.