ワークスペース
ワークスペースは、モノレポの構成要素です。モノレポに追加する各アプリとパッケージは、独自のワークスペース内に配置されます。
ワークスペースは、パッケージマネージャーによって管理されるため、まずパッケージマネージャーを設定しておいてください。
ワークスペースの構成
ワークスペースを使用するには、まず、そのファイルシステムの場所をパッケージマネージャーに宣言する必要があります。
推奨される一般的な規則は、トップレベルに apps/ および packages/ ディレクトリを持つことです。これは必須ではありません。あくまで推奨されるディレクトリ構造です。
apps フォルダーには、Next.js (新しいタブで開きます) や Svelte (新しいタブで開きます) アプリなど、起動可能なアプリのワークスペースを含める必要があります。
packages フォルダーには、アプリまたは別のパッケージによって使用されるパッケージのワークスペースを含める必要があります。
ワークスペースとして構成するフォルダーを、ルートの package.json ファイルの workspaces フィールドに追加します。このフィールドには、グロブの形式でワークスペースフォルダーのリストが含まれています。
{
"name": "my-monorepo",
"version": "1.0.0",
"workspaces": [
"docs",
"apps/*",
"packages/*"
]
}my-monorepo
├─ docs
├─ apps
│ ├─ api
│ └─ mobile
├─ packages
│ ├─ tsconfig
│ └─ shared-utils
└─ sdk上記の例では、my-monorepo/apps/ および my-monorepo/packages/ 内のすべてのディレクトリがワークスペースであり、my-monorepo/docs ディレクトリ自体もワークスペースです。my-monorepo/sdk/ は、ワークスペース構成に含まれていないため、ワークスペースでは_ありません_。
ワークスペースの名前付け
各ワークスペースには一意の名前があり、その名前は package.json で指定されます。
{
"name": "shared-utils"
}この名前は次の用途に使用されます。
- パッケージをインストールするワークスペースを指定します
- 他のワークスペースでこのワークスペースを使用します
- パッケージの公開:指定した
nameで npm に公開されます。
npm 上の既存のパッケージとの衝突を避けるために、npm の組織またはユーザースコープを使用できます。たとえば、@mycompany/shared-utils のように使用できます。
相互に依存するワークスペース
あるワークスペース内で別のワークスペースを使用するには、その名前を使用して依存関係として指定する必要があります。
たとえば、apps/docs が packages/shared-utils をインポートしたい場合は、apps/docs/package.json 内で shared-utils を依存関係として追加する必要があります。
{
"dependencies": {
"shared-utils": "*"
}
}* を使用すると、依存関係の最新バージョンを参照できます。パッケージのバージョンが変更された場合に、依存関係のバージョンを上げる必要がなくなります。
通常のパッケージと同様に、その後ルートから install を実行する必要があります。インストールが完了すると、node_modules からの他のパッケージと同様にワークスペースを使用できます。詳細については、コードの共有に関するセクションを参照してください。
ワークスペースの管理
モノレポでは、ルートから install コマンドを実行すると、いくつかの処理が行われます。
- インストールされているワークスペースの依存関係がチェックされます。
- ワークスペースは、シンボリックリンク (新しいタブで開きます) で
node_modulesに配置されるため、通常のパッケージのようにインポートできます。 - その他のパッケージはダウンロードされ、
node_modulesにインストールされます。
つまり、ワークスペースを追加/削除したり、ファイルシステム上の場所を変更したりする場合は、ルートから install コマンドを再実行して、ワークスペースを再度設定する必要があります。
パッケージ内のソースコードが変更されるたびに再インストールする必要はありません。ワークスペースの場所(または設定)を何らかの方法で変更した場合のみです。
問題が発生した場合は、リポジトリ内の各 node_modules フォルダーを削除し、install を再実行して修正する必要がある場合があります。