"workspaces". Workspaces split a codebase into distinct packages that live in the same repository, can depend on each other, and (when possible) share a node_modules directory.
Clone this sample project to experiment with workspaces.
The root
package.json should not contain "dependencies", "devDependencies", or other dependency fields. Each package should be self-contained and declare its own dependencies. It’s conventional to declare "private": true to avoid accidentally publishing the root package to npm.
package.json
It’s common to place all packages in a
packages directory. The "workspaces" field in package.json supports glob patterns, so packages/* treats each subdirectory of packages as a separate package (also known as a workspace).
File Tree
To add dependencies between workspaces, use the
"workspace:*" syntax. The following adds stuff-a as a dependency of stuff-b.
packages/stuff-b/package.json
Once added, run
bun install from the project root to install dependencies for all workspaces.
terminal
To add npm dependencies to a particular workspace,
cd to that directory and run bun add as you normally would. Bun detects that you are in a workspace and hoists the dependency as needed.
terminal
See
bun install.