O gerenciador de pacotes do Bun suporta npm "workspaces". Isso permite que você divida uma base de código em vários "pacotes" distintos que vivem no mesmo repositório, podem depender uns dos outros e (quando possível) compartilham um diretório node_modules.
Clone este projeto de exemplo para experimentar com workspaces.
O package.json raiz não deve conter nenhum "dependencies", "devDependencies", etc. Cada pacote individual deve ser autocontido e declarar suas próprias dependências. Da mesma forma, é convencional declarar "private": true para evitar publicar acidentalmente o pacote raiz no npm.
{
"name": "my-monorepo",
"private": true,
"workspaces": ["packages/*"]
}É comum colocar todos os pacotes em um diretório packages. O campo "workspaces" em package.json suporta padrões glob, então você pode usar packages/* para indicar que cada subdiretório de packages deve ser considerado um pacote separado (também conhecido como um workspace).
.
├── package.json
├── node_modules
└── packages
├── stuff-a
│ └── package.json
└── stuff-b
└── package.jsonPara adicionar dependências entre workspaces, use a sintaxe "workspace:*". Aqui estamos adicionando stuff-a como uma dependência de stuff-b.
{
"name": "stuff-b",
"dependencies": {
"stuff-a": "workspace:*"
}
}Uma vez adicionado, execute bun install a partir da raiz do projeto para instalar dependências para todos os workspaces.
bun installPara adicionar dependências npm a um workspace específico, basta cd para o diretório apropriado e executar comandos bun add como faria normalmente. O Bun detectará que você está em um workspace e elevará a dependência conforme necessário.
cd packages/stuff-a
bun add zodVeja Docs > Package manager para documentação completa do gerenciador de pacotes do Bun.