semver
package.json の semver 範囲指定 (^ とか)
そうそう、いつも忘れるのよね・・・
本家
0.x.y のときは breaking change をいつでも作ってよい。開発初期のモラトリアム期間。minor でも patch でもあり。1.0.0 以降は breaking change がある場合は major を上げなければならない。
package-lock.json や yarn.lock がある理由
package.json のバージョン指定は幅があるので要求を満たせばインストール時点での最新版が選ばれ、開発者ごとに使うパッケージのバージョンがずれる。
package-lock.json や yarn.lock をリポジトリに入れていれば、git clone & yarn install したときに yarn.lock に記載されているバージョンがインストールされる。
package.json の x.x.x や ^x.x.x をどのバージョンに「解決」するかの resolver だと思えばよい。メンテしてあげないと共通のバージョンを使えるパッケージも別のバージョンに解決してしまうエントリができていたりするので注意。
パッケージ間でやりとりする u64, BN, Decimal はバージョンを揃えて置かないと受け渡しができなくなる。
モジュールタイプ
cjs (commonjs) で配布されているものが多いが、esm とかブラウザ用の browser を含むものもある。
どのタイプかは package.json の type 情報か、拡張子などで判断される。node は何もしなければ cjs と期待している。
依存パッケージの依存パッケージにも特定バージョンを強制
yarn だけが resolutions を使える。