Open15
モノレポあれこれ

corepack enable
corepack prepare "pnpm@バージョン"
jq -r .engines.pnpm
で pnpm のバージョンを取るのも良い

pnpm setup

pnpm i -g create-turbo@latest

新規作成ではなく既存のフォルダをモノレポにするのでこっちだった

pnpm init
package.json
"scripts": {
"preinstall": "npx only-allow pnpm"
},
"packageManager": "pnpm@...",
"engines": {
"npm": "...",
"yarn": "...",
"pnpm": ">=8.6.11"
}

pnpm-workspace.yaml
packages:
- "packages/*"
- "apps/*"

pnpm add -w -D turbo

turbo.json
{
"$schema": "https://turbo.build/schema.json"
}

ログ等吐き出されるファイルがあるようなので、 .gitignore をホワイトリスト形式でルートディレクトリに追加
*
!*/
.turbo
node_modules
個別のアプリケーションの .gitignore は個別のアプリケーションのほうに追加

ルートディレクトリでサブディレクトリの scripts を実行する
package.json
"scripts": {
"backend": "pnpm --filter \"backend\"
}
Terminal
pnpm backend test

.npmrc
engine-strict=true # package.json の engines で指定されたものだけ許可
progress=false # コマンド実行時の npm のプログレスバー非表示
save-exact=true # パッケージインストール時にセマンティックバージョニングの演算子を package.json に書き込まない
Renovate など利用時は save-exact=true にしてデフォルトでセマンティックバージョニングを書き込まない

サブディレクトリ作成
Terminal
mkdir -p ./apps/app-1
cd apps/app-1
pnpm init
必要であれば pnpm-workspace.yaml にも追記。ワイルドカード指定しているので今回は不要

husky, lint-staged
Terminal
pnpm add -w -D husky lint-staged
各 workspace 直下に .lintstagedrc.json を置いて個別に設定するだけで、実行はルートからlint-staged すれば良いだけ。らくちん。

npx, pnpm dlx, pnpm exec について
リンクのコメント部
npx works like both pnpm dlx and pnpm exec. If it find a locally installed command, then it executes it, if it does find it, then it downloads and executes it. –
Zoltan Kochan
May 7 at 9:01