Open7

lock ファイルの更新を検知して初回や checkout, pull したときに自動で npm i するようにしたい

SENKENSENKEN

npm i といいつつ、私は pnpm v9 を使っている

SENKENSENKEN
    "pretest*": "[ -f .pnpm-lock.hash ] && sha1sum -c .pnpm-lock.hash || sha1sum pnpm-lock.yaml > .pnpm-lock.hash && pnpm install",
    "test": "echo \"Error: no test specified\" && exit 1"

chatgpt に聞いたら .pnpm-lock.hash ファイルを作って管理するといいよって教えてくれた
.pnpm-lock.hash は gitignore に入れても良さそう

うーん、でもこの方法だとすべての script に pre- を作る必要が出てくるなー

SENKENSENKEN

うーん、もう shell の pnpm() 関数を作って、~/.zshrc とかに書いて、lock ファイルのハッシュ値をローカルで管理するのがいいのでは??

SENKENSENKEN

bun もできそうな感じのドキュメントがあるけど bun run で自動的に install はしてくれないな
import { z } from "zod@3.0.0" とかに書き換えても cache を使うだけでそのバージョンでは実行してくれない
https://bun.sh/docs/runtime/autoimport

SENKENSENKEN

うーん、やはりyarn(もしくは deno )なのだろうか?

SENKENSENKEN
pnpm() {
  if [[ -f pnpm-lock.yaml && ("$1" == "run" || "$1" == "exec" || "$3" == "run" || "$3" == "exec") ]]; then
    # Check and update dependencies if pnpm-lock.yaml changed
    if [ -f ~/.pnpm-lock.hash ]; then
      sha1sum -c ~/.pnpm-lock.hash || { sha1sum pnpm-lock.yaml >~/.pnpm-lock.hash && pnpm install; }
    else
      sha1sum pnpm-lock.yaml >~/.pnpm-lock.hash && pnpm install
    fi
  fi
  # Run the actual pnpm command with all arguments
  command pnpm "$@"
}

一応こんな感じのスクリプトで、pnpm-lock.yaml が変わったら ~/.pnpm-lock.hash に保存していた hash も更新されて pnpm i が走るようにできた。もうこれでええか