はるさめ.dev

pnpm の workspace でフィルタ実行時に “No projects matched"

に公開

背景

pnpm の --filter 機能を使って、プロジェクトルートからモノレポ化したパッケージの npm スクリプトを実行しようとしましたが、以下のエラーメッセージが表示され、実行できませんでした。

No projects matched the filters in ”プロジェクトのルートパス”

プロジェクトは、以下のようなディレクトリ構造になっています。

  • プロジェクトルート
    • packages(このディレクトリ以下を workspace 機能でパッケージ化)
      • package-web
      • package-api

package-web の dev という npm スクリプトを実行するために、以下のコマンドを実行しました。

$ pnpm —filter package-web dev

解決方法

--filter に指定する値は パッケージのディレクトリ名ではなく、package.jsonname に定義されている値 である必要があります。

たとえば、package-web の package.json に以下のような記述がある場合:

package.json
{
  "name": "web"
}

実行すべきコマンドは次のようになります。

$ pnpm —filter web dev

あとがき

workspace を使ってパッケージ化する際はディレクトリ名とパッケージ名は同じにしておいたほうが良さそうに思いました。
今回はあとからモノレポ化した関係でディレクトリ名とパッケージ名が異なっていましたが pnpm init すればディレクトリ名がパッケージ名になるはずなのであまり遭遇しない問題かもしれません。

コメント