📌

pnpm workspaceのサブパッケージ名でハマった話

2024/05/11に公開

概要

pnpm workspalceを使用したモノレポ構成のプロジェクトを作成してみた中で、サブパッケージ名でハマったので備忘録

経緯

Next.jsを使用したフロントエンドとNestJSを使用してバックエンドを開発していて、開発中にそれぞれのプロジェクトを別々に起動することが面倒だった。
プロジェクトルートからそれぞれのプロジェクトのnpm scriptを実行したかったので、pnpm workspaceを使用してみようという経緯。

結論

pnpm サブパッケージ名にserverを使用した場合に、サブパッケージの起動に失敗していた。
原因は pnpm cli自体にserverコマンドが含まれているため、そちらが優先して実行されていた。

前提

フォルダ構成

.
├── package.json
├── client/
        └── package.json
├── server/
        └── package.json
├──  package.json
└──  pnpm-workspace.yaml
package.json
{
  "name": "demo-app",
  "version": "1.0.0",
  "workspaces": [
    "client",
    "server"
  ],
  "scripts": {
    "client": "pnpm -F \"client\"",
    "server": "pnpm -F \"server\""
  }
}
client/package.json
{
  "name": "client",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "dev": "next dev"
  }
}
server/package.json
{
  "name": "backend",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "dev": "nest start --watch"
  }
}

実行

console
./demo-app $ pnpm server dev
ERR_PNPM_INVALID_SERVER_COMMAND  "server dev" is not a pnpm command. See "pnpm help server".

感想

前提の設定でサブパッケージclient側へ起動は確認できたので、何でかなぁと思ってエラー部分を読み直してみるとSee "pnpm help server".と記述を見つけて原因に気づきました。
当たり前ですが、ちゃんとエラー見ないとと反省しました、、

公式ドキュメント

https://pnpm.io/ja/workspaces

Discussion