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.json の name に定義されている値 である必要があります。
たとえば、package-web の package.json に以下のような記述がある場合:
package.json
{
"name": "web"
}
実行すべきコマンドは次のようになります。
$ pnpm —filter web dev
あとがき
workspace を使ってパッケージ化する際はディレクトリ名とパッケージ名は同じにしておいたほうが良さそうに思いました。
今回はあとからモノレポ化した関係でディレクトリ名とパッケージ名が異なっていましたが pnpm init すればディレクトリ名がパッケージ名になるはずなのであまり遭遇しない問題かもしれません。