• javascript

    package.jsonのdependenciesのバージョンをpinするシェルスクリプト

    Renovateでは依存関係をpinすることを推奨していますし、yarnではdefaultSemverRangePrefixによりデフォルトでバージョンを固定化出来ます。

    しかしこういった設定をする前にあれこれインストールしてしまって、後からpinするの、ちょっと面倒ですよね。renovateが勝手にやってくれるはずなんですが、なんかやってくれないし。
    下記はそれをやってくれるスクリプトです。

    #!/bin/bash while read -r package current_version; do latest_version=$(yarn info "$package" version --json | jq -r '.children.Version') jq --arg package "$package" --arg latest_version "$latest_version" '.dependencies[$package] = $latest_version' package.json > tmp.json && mv tmp.json package.json done < <(jq -r '.dependencies | to_entries[] | "\(.key) \(.value)"' package.json)

    注意点として下記があります。

    • jqが必要です
    • dependencies を対象としています
      • 2行目・4行目のdependenciesdevDependenciesに書き換えればdevDependenciesを対象に出来ます
    • yarnを利用しています
      • pnpmの場合はlistが使えると思います
      • その場合2行目のjqのコマンドもおそらく変える必要があります