🌿

もはや pnpm と Turborepo で Monorepo 環境作れるから

に公開
11
GitHubで編集を提案

Discussion

MelodyclueMelodyclue

prismaなどの複数パッケージ間で同じバージョンにしたいといったバージョン管理については、今の所手動で調節するしかないですかね?

uttkuttk

Monorepo ではルートに共通のパッケージをインストールすることで複数のパッケージ間で同じバージョンのパッケージを使用することができます。

具体例を挙げると、この記事の場合は typescript@^4.9.4lib-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 コマンドを使用できます )

たくみんたくみん

lib-bにlib-aをインストールする部分で、pnpm add lib-aだと「npmレジストリにそんなパッケージないよ」というエラーが出ます
pnpm add 'lib-a@workspace:*'だとエラーが出ないで正常に別ディレクトリをパッケージとして追加できました

uttkuttk

報告ありがとうございます!

pnpm-workspace.yaml がある場合、設定したディレクトリ以下のパッケージを自動的に検知してインストールしてくれるはずですが、もしかしたら pnpm のアップデートによって挙動が変更されたかもしませんね... ( 記事内では pnpm@7.21.0 を使っているのでちょっと古いです )

確認と勉強のため、使用されている pnpm のバージョンをお聞きしたいです!

uttkuttk

それっぽい issue 見つけました 👀

https://github.com/pnpm/pnpm/issues/8172

恐らく v9 以上だと発生するみたいです。
回避策として、.npmrclink-workspace-packages=true を設定してあげるといいみたいです。

P.S. 記事の内容を新しいバージョンに対応する形で変更したいと思います。報告感謝です🙏

uttkuttk

記事の内容を更新して、最新の pnpm や turborepo に対応しました。

たくみんたくみん

すみません、pnpmのバージョン書くべきでしたね
10.0.0です!

記事内容の更新、ありがとうございます!

Konno SoutaKonno Souta
pnpm 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