多分~(チルダ)と^(キャレット)の違いが最も分かりやすい説明だと思う。
【Node.js】package.jsonとpackage-lock.jsonについて簡単にまとめる - Qiita
package-lock.jsonの必要性がより分かる記事が下記
package.jsonとpackage-lock.jsonの運用方法について