🌿もはや pnpm と Turborepo で Monorepo 環境作れるから2023/01/31に公開2025/02/2011件monorepopnpmTurborepotechGitHubで編集を提案DiscussionMelodyclue2023/09/08prismaなどの複数パッケージ間で同じバージョンにしたいといったバージョン管理については、今の所手動で調節するしかないですかね? uttk2023/09/08に更新Monorepo ではルートに共通のパッケージをインストールすることで複数のパッケージ間で同じバージョンのパッケージを使用することができます。 具体例を挙げると、この記事の場合は typescript@^4.9.4 が lib-a, lib-b それぞれでインストールされていますが、これをルートの node_modules にまとめることができます 👇 ./node_modules にインストールされます # -w を使うとルートの node_modules にインストールできます $> pnpm add -w -D typescript@^4.9.4 このようにまとめた場合、ルートの typescript を参照するように ( 巻き上げが発生しないように ) lib-a, lib-b それぞれにインストールしていた typescript を削除する必要があります 👇 ルートを参照するようにパッケージ内のtypescriptを削除する $> pnpm --filter lib-a remove typescript $> pnpm --filter lib-b remove typescript ここまでを実行すると、package.json の依存関係は以下のようになります 👇 ./package.json "devDependencies": { "turbo": "^1.10.13", + "typescript": " typescript@^4.9.4" }, ./packages/lib-a/package.json "devDependencies": { - "typescript": " typescript@^4.9.4" }, ./packages/lib-b/package.json "devDependencies": { - "typescript": " typescript@^4.9.4" }, これで、lib-a, lib-b で同じバージョンの typescript を使用することができます。( もちろん、これまで通り lib-a, lib-b 内の npm scripts でも tsc コマンドを使用できます ) Melodyclue2023/09/08具体例までありがとうございます よく理解できました! 返信を追加たくみん2025/02/02に更新lib-bにlib-aをインストールする部分で、pnpm add lib-aだと「npmレジストリにそんなパッケージないよ」というエラーが出ます pnpm add 'lib-a@workspace:*'だとエラーが出ないで正常に別ディレクトリをパッケージとして追加できました uttk2025/02/02報告ありがとうございます! pnpm-workspace.yaml がある場合、設定したディレクトリ以下のパッケージを自動的に検知してインストールしてくれるはずですが、もしかしたら pnpm のアップデートによって挙動が変更されたかもしませんね... ( 記事内では pnpm@7.21.0 を使っているのでちょっと古いです ) 確認と勉強のため、使用されている pnpm のバージョンをお聞きしたいです! uttk2025/02/02それっぽい issue 見つけました 👀 https://github.com/pnpm/pnpm/issues/8172 恐らく v9 以上だと発生するみたいです。 回避策として、.npmrc に link-workspace-packages=true を設定してあげるといいみたいです。 P.S. 記事の内容を新しいバージョンに対応する形で変更したいと思います。報告感謝です🙏 uttk2025/02/02記事の内容を更新して、最新の pnpm や turborepo に対応しました。 たくみん2025/02/02すみません、pnpmのバージョン書くべきでしたね 10.0.0です! 記事内容の更新、ありがとうございます! 返信を追加Konno Souta2025/02/20pnpm add @uttk/lib-a@workspace:* Macの場合、Zshが@uttk/lib-a@workspace:*の*をワイルドカードとして解釈してしまっているためか、エラーになりました。 > pnpm --filter lib-b add @uttk/lib-a@workspace:* zsh: no matches found: @uttk/lib-a@workspace:* クォートで囲むことで解消しました。 > pnpm --filter lib-b add '@uttk/lib-a@workspace:*' packages/lib-b | Progress: resolved 1, reused 1, downloaded 0, added 0, done Done in 315ms uttk2025/02/20報告ありがとうございます!めちゃめちゃ助かりました! 以下の PR で対応しました! https://github.com/uttk/zenn-contents/pull/40 Konno Souta2025/02/21対応いただきありがとうございます! 返信を追加
Melodyclue2023/09/08prismaなどの複数パッケージ間で同じバージョンにしたいといったバージョン管理については、今の所手動で調節するしかないですかね? uttk2023/09/08に更新Monorepo ではルートに共通のパッケージをインストールすることで複数のパッケージ間で同じバージョンのパッケージを使用することができます。 具体例を挙げると、この記事の場合は typescript@^4.9.4 が lib-a, lib-b それぞれでインストールされていますが、これをルートの node_modules にまとめることができます 👇 ./node_modules にインストールされます # -w を使うとルートの node_modules にインストールできます $> pnpm add -w -D typescript@^4.9.4 このようにまとめた場合、ルートの typescript を参照するように ( 巻き上げが発生しないように ) lib-a, lib-b それぞれにインストールしていた typescript を削除する必要があります 👇 ルートを参照するようにパッケージ内のtypescriptを削除する $> pnpm --filter lib-a remove typescript $> pnpm --filter lib-b remove typescript ここまでを実行すると、package.json の依存関係は以下のようになります 👇 ./package.json "devDependencies": { "turbo": "^1.10.13", + "typescript": " typescript@^4.9.4" }, ./packages/lib-a/package.json "devDependencies": { - "typescript": " typescript@^4.9.4" }, ./packages/lib-b/package.json "devDependencies": { - "typescript": " typescript@^4.9.4" }, これで、lib-a, lib-b で同じバージョンの typescript を使用することができます。( もちろん、これまで通り lib-a, lib-b 内の npm scripts でも tsc コマンドを使用できます ) Melodyclue2023/09/08具体例までありがとうございます よく理解できました! 返信を追加
uttk2023/09/08に更新Monorepo ではルートに共通のパッケージをインストールすることで複数のパッケージ間で同じバージョンのパッケージを使用することができます。 具体例を挙げると、この記事の場合は typescript@^4.9.4 が lib-a, lib-b それぞれでインストールされていますが、これをルートの node_modules にまとめることができます 👇 ./node_modules にインストールされます # -w を使うとルートの node_modules にインストールできます $> pnpm add -w -D typescript@^4.9.4 このようにまとめた場合、ルートの typescript を参照するように ( 巻き上げが発生しないように ) lib-a, lib-b それぞれにインストールしていた typescript を削除する必要があります 👇 ルートを参照するようにパッケージ内のtypescriptを削除する $> pnpm --filter lib-a remove typescript $> pnpm --filter lib-b remove typescript ここまでを実行すると、package.json の依存関係は以下のようになります 👇 ./package.json "devDependencies": { "turbo": "^1.10.13", + "typescript": " typescript@^4.9.4" }, ./packages/lib-a/package.json "devDependencies": { - "typescript": " typescript@^4.9.4" }, ./packages/lib-b/package.json "devDependencies": { - "typescript": " typescript@^4.9.4" }, これで、lib-a, lib-b で同じバージョンの typescript を使用することができます。( もちろん、これまで通り lib-a, lib-b 内の npm scripts でも tsc コマンドを使用できます )
たくみん2025/02/02に更新lib-bにlib-aをインストールする部分で、pnpm add lib-aだと「npmレジストリにそんなパッケージないよ」というエラーが出ます pnpm add 'lib-a@workspace:*'だとエラーが出ないで正常に別ディレクトリをパッケージとして追加できました uttk2025/02/02報告ありがとうございます! pnpm-workspace.yaml がある場合、設定したディレクトリ以下のパッケージを自動的に検知してインストールしてくれるはずですが、もしかしたら pnpm のアップデートによって挙動が変更されたかもしませんね... ( 記事内では pnpm@7.21.0 を使っているのでちょっと古いです ) 確認と勉強のため、使用されている pnpm のバージョンをお聞きしたいです! uttk2025/02/02それっぽい issue 見つけました 👀 https://github.com/pnpm/pnpm/issues/8172 恐らく v9 以上だと発生するみたいです。 回避策として、.npmrc に link-workspace-packages=true を設定してあげるといいみたいです。 P.S. 記事の内容を新しいバージョンに対応する形で変更したいと思います。報告感謝です🙏 uttk2025/02/02記事の内容を更新して、最新の pnpm や turborepo に対応しました。 たくみん2025/02/02すみません、pnpmのバージョン書くべきでしたね 10.0.0です! 記事内容の更新、ありがとうございます! 返信を追加
uttk2025/02/02報告ありがとうございます! pnpm-workspace.yaml がある場合、設定したディレクトリ以下のパッケージを自動的に検知してインストールしてくれるはずですが、もしかしたら pnpm のアップデートによって挙動が変更されたかもしませんね... ( 記事内では pnpm@7.21.0 を使っているのでちょっと古いです ) 確認と勉強のため、使用されている pnpm のバージョンをお聞きしたいです!
uttk2025/02/02それっぽい issue 見つけました 👀 https://github.com/pnpm/pnpm/issues/8172 恐らく v9 以上だと発生するみたいです。 回避策として、.npmrc に link-workspace-packages=true を設定してあげるといいみたいです。 P.S. 記事の内容を新しいバージョンに対応する形で変更したいと思います。報告感謝です🙏
Konno Souta2025/02/20pnpm add @uttk/lib-a@workspace:* Macの場合、Zshが@uttk/lib-a@workspace:*の*をワイルドカードとして解釈してしまっているためか、エラーになりました。 > pnpm --filter lib-b add @uttk/lib-a@workspace:* zsh: no matches found: @uttk/lib-a@workspace:* クォートで囲むことで解消しました。 > pnpm --filter lib-b add '@uttk/lib-a@workspace:*' packages/lib-b | Progress: resolved 1, reused 1, downloaded 0, added 0, done Done in 315ms uttk2025/02/20報告ありがとうございます!めちゃめちゃ助かりました! 以下の PR で対応しました! https://github.com/uttk/zenn-contents/pull/40 Konno Souta2025/02/21対応いただきありがとうございます! 返信を追加
uttk2025/02/20報告ありがとうございます!めちゃめちゃ助かりました! 以下の PR で対応しました! https://github.com/uttk/zenn-contents/pull/40
Discussion
prismaなどの複数パッケージ間で同じバージョンにしたいといったバージョン管理については、今の所手動で調節するしかないですかね?
Monorepo ではルートに共通のパッケージをインストールすることで複数のパッケージ間で同じバージョンのパッケージを使用することができます。
具体例を挙げると、この記事の場合は
typescript@^4.9.4がlib-a,lib-bそれぞれでインストールされていますが、これをルートの node_modules にまとめることができます 👇このようにまとめた場合、ルートの
typescriptを参照するように ( 巻き上げが発生しないように )lib-a,lib-bそれぞれにインストールしていたtypescriptを削除する必要があります 👇ここまでを実行すると、package.json の依存関係は以下のようになります 👇
これで、
lib-a,lib-bで同じバージョンのtypescriptを使用することができます。( もちろん、これまで通りlib-a,lib-b内の npm scripts でもtscコマンドを使用できます )具体例までありがとうございます
よく理解できました!
lib-bにlib-aをインストールする部分で、
pnpm add lib-aだと「npmレジストリにそんなパッケージないよ」というエラーが出ますpnpm add 'lib-a@workspace:*'だとエラーが出ないで正常に別ディレクトリをパッケージとして追加できました報告ありがとうございます!
pnpm-workspace.yaml がある場合、設定したディレクトリ以下のパッケージを自動的に検知してインストールしてくれるはずですが、もしかしたら pnpm のアップデートによって挙動が変更されたかもしませんね... ( 記事内では
pnpm@7.21.0を使っているのでちょっと古いです )確認と勉強のため、使用されている pnpm のバージョンをお聞きしたいです!
それっぽい issue 見つけました 👀
恐らく v9 以上だと発生するみたいです。
回避策として、
.npmrcにlink-workspace-packages=trueを設定してあげるといいみたいです。P.S. 記事の内容を新しいバージョンに対応する形で変更したいと思います。報告感謝です🙏
記事の内容を更新して、最新の pnpm や turborepo に対応しました。
すみません、pnpmのバージョン書くべきでしたね
10.0.0です!
記事内容の更新、ありがとうございます!
Macの場合、Zshが@uttk/lib-a@workspace:*の
*をワイルドカードとして解釈してしまっているためか、エラーになりました。クォートで囲むことで解消しました。
報告ありがとうございます!めちゃめちゃ助かりました!
以下の PR で対応しました!
対応いただきありがとうございます!