Skip to content

Менеджер пакетов Bun поддерживает npm "workspaces". Это позволяет разделить кодовую базу на несколько отдельных «пакетов», которые находятся в одном репозитории, могут зависеть друг от друга и (когда это возможно) использовать общую директорию node_modules.

Клонируйте этот пример проекта для экспериментов с workspaces.


Корневой package.json не должен содержать никаких "dependencies", "devDependencies" и т.д. Каждый отдельный пакет должен быть самодостаточным и объявлять собственные зависимости. Аналогично, рекомендуется указать "private": true, чтобы избежать случайной публикации корневого пакета в npm.

json
{
  "name": "my-monorepo",
  "private": true,
  "workspaces": ["packages/*"]
}

Обычно все пакеты размещают в директории packages. Поле "workspaces" в package.json поддерживает glob-шаблоны, поэтому вы можете использовать packages/*, чтобы указать, что каждый подкаталог packages должен считаться отдельным пакетом (также известным как workspace).

txt
.
├── package.json
├── node_modules
└── packages
    ├── stuff-a
    │   └── package.json
    └── stuff-b
        └── package.json

Для добавления зависимостей между workspaces используйте синтаксис "workspace:*". Здесь мы добавляем stuff-a как зависимость stuff-b.

json
{
  "name": "stuff-b",
  "dependencies": {
    "stuff-a": "workspace:*"
  }
}

После добавления выполните bun install из корня проекта для установки зависимостей для всех workspaces.

sh
bun install

Для добавления npm-зависимостей в конкретный workspace просто перейдите в соответствующую директорию с помощью cd и выполните команды bun add как обычно. Bun обнаружит, что вы находитесь в workspace, и поднимет зависимость по мере необходимости.

sh
cd packages/stuff-a
bun add zod

Смотрите Документация > Package manager для полной документации по менеджеру пакетов Bun.

Bun от www.bunjs.com.cn