⛓️monorepo でも pnpm の利用を強制させる2025/09/21に公開2025/09/244件JavaScriptnpmyarnpnpmtechGitHubで編集を提案Discussionyuja2ヶ月前に更新"packageManager": "pnpm@latest" を package.jsonに追加する、でいいのでは? https://docs.npmjs.com/cli/v10/configuring-npm/package-json?v=true#devengines ajfAfg2ヶ月前ご指摘ありがとうございます! ご指摘いただいた、package.json の .devEngines.packageManager の設定により pnpm の利用を強制する方法は、本稿で紹介している「engines を使う方法」と同様に、workspace に含まれる全ての package.json の .devEngines.packageManager を設定する必要があります。つまり、もしあるパッケージで上記の設定がされていない場合、そのパッケージのディレクトリ配下では npm install を叩いてもエラーになりません。 全部設定すればよいのではとも思いますが、本稿のモチベーションは「全ての package.json で同じ設定をするのは面倒くさいし間違えそう」といったところから始まっており、本稿の主張は Mise を活用すると一回設定するだけでよいので嬉しいというところになります。 返信を追加ryoppippi2ヶ月前に更新上のコメントにもあるように、"packageManager": "pnpm@10.17.0"のようにpackageManagerを使えばいいと思います(latestは危険かな)。またpnpmは自動的にpackageManager filedを見て適切なバージョンをダウンロードして使ってくれます。 https://pnpm.io/settings#managepackagemanagerversions さらに、pnpm自体でnodeのversionも管理できます。 https://pnpm.io/settings#usenodeversion https://pnpm.io/package_json#devenginesruntime また、only-allowの侵害について本文中で触れられていますが、only-allowの作者はpnpmの作者 なので、only-allowが侵害されることとpnpm自体が侵害されることは同義です。なのでそのリスクは考えても仕方がないと思います。 個人的には、pnpmをglobalでinstallさせて、nodeおよびpnpm自身のバージョンはpnpmに寄せるのが最適解かなと考えています。 ajfAfg2ヶ月前ご指摘ありがとうございます! packageManager については、https://zenn.dev/link/comments/6205d5a69616c6 でコメントいたしました。 only-allow の侵害と pnpm の侵害は同義という点について、それぞれリポジトリが異なるのでどちらか一方のみ侵害される可能性はあるかと思いますが、考えすぎなのはそうかもです。過度に恐れて利用を避けなくてもよいかもですね。 バージョンをどこに寄せるかについては、個人的には node や pnpm 以外のコマンド(e.g. terraform)をよく Mise で管理しているので、全て Mise で完結できると嬉しいなと考えています。この辺りは宗派だと思っているので、ご指摘の通り pnpm に寄せる方針もあると思います。 返信を追加
yuja2ヶ月前に更新"packageManager": "pnpm@latest" を package.jsonに追加する、でいいのでは? https://docs.npmjs.com/cli/v10/configuring-npm/package-json?v=true#devengines ajfAfg2ヶ月前ご指摘ありがとうございます! ご指摘いただいた、package.json の .devEngines.packageManager の設定により pnpm の利用を強制する方法は、本稿で紹介している「engines を使う方法」と同様に、workspace に含まれる全ての package.json の .devEngines.packageManager を設定する必要があります。つまり、もしあるパッケージで上記の設定がされていない場合、そのパッケージのディレクトリ配下では npm install を叩いてもエラーになりません。 全部設定すればよいのではとも思いますが、本稿のモチベーションは「全ての package.json で同じ設定をするのは面倒くさいし間違えそう」といったところから始まっており、本稿の主張は Mise を活用すると一回設定するだけでよいので嬉しいというところになります。 返信を追加
ajfAfg2ヶ月前ご指摘ありがとうございます! ご指摘いただいた、package.json の .devEngines.packageManager の設定により pnpm の利用を強制する方法は、本稿で紹介している「engines を使う方法」と同様に、workspace に含まれる全ての package.json の .devEngines.packageManager を設定する必要があります。つまり、もしあるパッケージで上記の設定がされていない場合、そのパッケージのディレクトリ配下では npm install を叩いてもエラーになりません。 全部設定すればよいのではとも思いますが、本稿のモチベーションは「全ての package.json で同じ設定をするのは面倒くさいし間違えそう」といったところから始まっており、本稿の主張は Mise を活用すると一回設定するだけでよいので嬉しいというところになります。
ryoppippi2ヶ月前に更新上のコメントにもあるように、"packageManager": "pnpm@10.17.0"のようにpackageManagerを使えばいいと思います(latestは危険かな)。またpnpmは自動的にpackageManager filedを見て適切なバージョンをダウンロードして使ってくれます。 https://pnpm.io/settings#managepackagemanagerversions さらに、pnpm自体でnodeのversionも管理できます。 https://pnpm.io/settings#usenodeversion https://pnpm.io/package_json#devenginesruntime また、only-allowの侵害について本文中で触れられていますが、only-allowの作者はpnpmの作者 なので、only-allowが侵害されることとpnpm自体が侵害されることは同義です。なのでそのリスクは考えても仕方がないと思います。 個人的には、pnpmをglobalでinstallさせて、nodeおよびpnpm自身のバージョンはpnpmに寄せるのが最適解かなと考えています。 ajfAfg2ヶ月前ご指摘ありがとうございます! packageManager については、https://zenn.dev/link/comments/6205d5a69616c6 でコメントいたしました。 only-allow の侵害と pnpm の侵害は同義という点について、それぞれリポジトリが異なるのでどちらか一方のみ侵害される可能性はあるかと思いますが、考えすぎなのはそうかもです。過度に恐れて利用を避けなくてもよいかもですね。 バージョンをどこに寄せるかについては、個人的には node や pnpm 以外のコマンド(e.g. terraform)をよく Mise で管理しているので、全て Mise で完結できると嬉しいなと考えています。この辺りは宗派だと思っているので、ご指摘の通り pnpm に寄せる方針もあると思います。 返信を追加
ajfAfg2ヶ月前ご指摘ありがとうございます! packageManager については、https://zenn.dev/link/comments/6205d5a69616c6 でコメントいたしました。 only-allow の侵害と pnpm の侵害は同義という点について、それぞれリポジトリが異なるのでどちらか一方のみ侵害される可能性はあるかと思いますが、考えすぎなのはそうかもです。過度に恐れて利用を避けなくてもよいかもですね。 バージョンをどこに寄せるかについては、個人的には node や pnpm 以外のコマンド(e.g. terraform)をよく Mise で管理しているので、全て Mise で完結できると嬉しいなと考えています。この辺りは宗派だと思っているので、ご指摘の通り pnpm に寄せる方針もあると思います。
Discussion
"packageManager": "pnpm@latest"を package.jsonに追加する、でいいのでは?
ご指摘ありがとうございます!
ご指摘いただいた、
package.jsonの.devEngines.packageManagerの設定により pnpm の利用を強制する方法は、本稿で紹介している「enginesを使う方法」と同様に、workspace に含まれる全てのpackage.jsonの.devEngines.packageManagerを設定する必要があります。つまり、もしあるパッケージで上記の設定がされていない場合、そのパッケージのディレクトリ配下ではnpm installを叩いてもエラーになりません。全部設定すればよいのではとも思いますが、本稿のモチベーションは「全ての
package.jsonで同じ設定をするのは面倒くさいし間違えそう」といったところから始まっており、本稿の主張は Mise を活用すると一回設定するだけでよいので嬉しいというところになります。上のコメントにもあるように、
"packageManager": "pnpm@10.17.0"のようにpackageManagerを使えばいいと思います(latestは危険かな)。またpnpmは自動的にpackageManager filedを見て適切なバージョンをダウンロードして使ってくれます。さらに、pnpm自体でnodeのversionも管理できます。
また、only-allowの侵害について本文中で触れられていますが、only-allowの作者はpnpmの作者 なので、only-allowが侵害されることとpnpm自体が侵害されることは同義です。なのでそのリスクは考えても仕方がないと思います。
個人的には、pnpmをglobalでinstallさせて、nodeおよびpnpm自身のバージョンはpnpmに寄せるのが最適解かなと考えています。
ご指摘ありがとうございます!
packageManagerについては、https://zenn.dev/link/comments/6205d5a69616c6 でコメントいたしました。only-allow の侵害と pnpm の侵害は同義という点について、それぞれリポジトリが異なるのでどちらか一方のみ侵害される可能性はあるかと思いますが、考えすぎなのはそうかもです。過度に恐れて利用を避けなくてもよいかもですね。
バージョンをどこに寄せるかについては、個人的には
nodeやpnpm以外のコマンド(e.g.terraform)をよく Mise で管理しているので、全て Mise で完結できると嬉しいなと考えています。この辺りは宗派だと思っているので、ご指摘の通り pnpm に寄せる方針もあると思います。