OpenTUT

npm workspacesでモノレポ構成

りn

npm workspacesでモノレポ構成


モノレポ(monorepo)とは

  • 一つのリポジトリの中に複数のnpmパッケージ
  • 型、スキーマ、ロジックなどを共有できる

npm workspacesとは

モノレポを実現するツールにはいくつかある

  • Lerna
  • Nx
  • Turborepo

npm workspacesはnpmに付属しているため、別途ツールの導入が不要


npm workspacesを使うための準備

フォルダ構成

.
└── practice/
    ├── packages/
    │   ├── common/
    │   │   └── package.json (name: @practice/common)
    │   ├── client/
    │   │   └── package.json (name: @practice/client)
    │   └── server/
    │       └── package.json (name: @practice/server)
    └── package.json

practice/package.json

{
  "name": "@practice/workspace",
  "private": true,
  "workspaces": [
    "packages/common",
    "packages/client",
    "packages/server"
  ]
}

npm workspaces使い方

特定パッケージに外部依存を追加

$ npm install react -w @practice/client

特定パッケージに内部依存を追加

$ npm install @practice/common -w @practice/server

特定パッケージが持つnpm scriptを実行

$ npm run dev -w @practice/client

すべてのパッケージについてnpm scriptを実行

$ npm run build -ws

おわりに

これで複雑な依存関係に悩まされることなく複数パッケージから成る複雑なプロジェクトを構成できるようになる