通过 gihub issue 中的评论知道了,原来 npm 是根据 package.json 的 tab size 决定 package.lock.json 的 tab size
由于 .editorconfig 中下面的设置,造成 vscode 在保存 package.json 时自动按4个空格格式化,npm 也随之格式了 package.lock.json
[*]
indent_size = 4
修改 .editorconfig 的设置,重新保存 package.json 解决了
[*.json]
indent_size = 2