Менеджер пакетов Bun поддерживает npm "workspaces". Это позволяет разделить кодовую базу на несколько отдельных «пакетов», которые находятся в одном репозитории, могут зависеть друг от друга и (когда это возможно) использовать общую директорию node_modules.
Клонируйте этот пример проекта для экспериментов с workspaces.
Корневой package.json не должен содержать никаких "dependencies", "devDependencies" и т.д. Каждый отдельный пакет должен быть самодостаточным и объявлять собственные зависимости. Аналогично, рекомендуется указать "private": true, чтобы избежать случайной публикации корневого пакета в npm.
{
"name": "my-monorepo",
"private": true,
"workspaces": ["packages/*"]
}Обычно все пакеты размещают в директории packages. Поле "workspaces" в package.json поддерживает glob-шаблоны, поэтому вы можете использовать packages/*, чтобы указать, что каждый подкаталог packages должен считаться отдельным пакетом (также известным как workspace).
.
├── package.json
├── node_modules
└── packages
├── stuff-a
│ └── package.json
└── stuff-b
└── package.jsonДля добавления зависимостей между workspaces используйте синтаксис "workspace:*". Здесь мы добавляем stuff-a как зависимость stuff-b.
{
"name": "stuff-b",
"dependencies": {
"stuff-a": "workspace:*"
}
}После добавления выполните bun install из корня проекта для установки зависимостей для всех workspaces.
bun installДля добавления npm-зависимостей в конкретный workspace просто перейдите в соответствующую директорию с помощью cd и выполните команды bun add как обычно. Bun обнаружит, что вы находитесь в workspace, и поднимет зависимость по мере необходимости.
cd packages/stuff-a
bun add zodСмотрите Документация > Package manager для полной документации по менеджеру пакетов Bun.