多分~(チルダ)と^(キャレット)の違いが最も分かりやすい説明だと思う。

【Node.js】package.jsonとpackage-lock.jsonについて簡単にまとめる - Qiita

package-lock.jsonの必要性がより分かる記事が下記

package.jsonとpackage-lock.jsonの運用方法について