🛠️

packeage.jsonでのworkspaces活用法

に公開

はじめに

otot_devです。

package.jsonworkspaces機能を活用することで、モノレポ(Monorepo)の管理を効率化できることを知りました。
2022 年 10 月頃にはできるようになっていたようですね。
本記事では、workspacesについて書いていきたいと思います。

workspacesとは

workspacesとは、Node.js のパッケージマネージャ(npm や yarn、pnpm)が提供している機能の 1 つです。
ルートのパッケージから他のディレクトリの複数のパッケージを管理できます。
要は複数のパッケージを 1 つのリポジトリで管理するための仕組みですね。

あくまでも Node.js のパッケージマネージャを使用している場合の話になりますが、モノレポによる開発であったり、ローカルのモックサーバーを別のパッケージとして管理したり、はたまたテストだけ別のパッケージとして切り出してみたりと色々な使用方法ができそうです。

公式ドキュメントは以下を参照してみてください。

https://docs.npmjs.com/cli/v8/using-npm/workspaces

使用方法

以下のpackage.jsonがルートディレクトリにある状態です。

{
  "name": "my-workspaces",
  "workspaces": ["packages/a"]
}

今度はpackages/a配下にも別のパッケージマネージャーを作成します。

.
│── package.json
+└── packages
+    └── a
+        └── package.json

ルートディレクトリからパッケージのインストールをします。

npm install
# または
yarn install
# または
pnpm install

これだけで、ルートディレクトリ、packages/a配下のパッケージがインストールされます。

.
│── package.json
+│── node_modules
└── packages
    └── a
+        │── node_modules
        └── package.json

※pnpm の場合はpnpm-workspace.yamlをルート直下に作成する必要があるようです。

packages:
  - 'packages/a'

まとめ

workspacesは、Node.js を使用する場合に限られはしますが、モノレポ開発やローカル開発を効率化するための強力なツールです。特に、複数のパッケージが 1 つのリポジトリで管理されている場合やパッケージ間で依存関係がある場合などに有用そうです。

GitHubで編集を提案

Discussion