monorepoでスクリプトを内部パッケージに押し込む
開発の規模が大きくなってくると、package.jsonのscriptsでは書き切れない纏まった処理を書きたくなることがままある
ビルド系のあれこれや、E2Eテストなど
スクリプトの実行にのみ必要な依存パッケージをルートのpackage.jsonに置きたくない
そういうスクリプトをシェルスクリプトで書くのはあんまりやりたく無いので、zxとかを使いたい そうやっていくと、スクリプトにしか使わない依存パッケージがいくつか必要になったりする
せっかくmonorepoでパッケージを分けていて、linterの設定や依存とかは内部パッケージに押し込んでいるのだから、これも同じようにしたい
策
@repo/scriptsみたいな内部パッケージを作り、package.jsonのbinでスクリプトを指すようにする
で、ルートのpackage.jsonには@repo/scriptsのみを依存としておく
すると、npx / pnpm execでそれが実行できるようになる
考慮
.tsで書きたい
普通にコンパイルする
tscとかtsupとかで
スクリプトを$ turbo経由で実行するなら、taskのdependsOnにビルドタスク含めればよいので、実はそんなに面倒でも無いのかも
--experimental-strip-types?
だめぽ
package.jsonに"bin": { "hoge": "./index.mts" }をおいて、
NODE_OPTIONS='--experimental-strip-types' pnpm exec hoge してみたけどsyntax errorになっちゃう
package.jsonのbinで指定するのはファイルだから無理じゃ無い?
"bin": { "hoge": "./entry.mjs" }として、
entry.mjsからhoge.tsをimportして本体を実行すれば行けると思う
tuborepoでのキャッシュ
@repo/scriptsパッケージを弄ると全キャッシュがmissするようになる
rootが@repo/scriptsに依存しているので
@repo/scriptsを細かく分割するか、rootではなく関係する内部パッケージそれぞれの依存とすれば、範囲は狭められる?
でもこういうscriptって大体内部パッケージをまたいで影響すると思う