是否有工具可以验证/检查 package.json 和 package-lock.json 是否一致?

Lor*_*geb 8 node.js npm package.json package-lock.json

有时人们会更改package.json并忘记运行npm i哪个将更新package-lock.json,或者package.jsonpackage-lock.json其他方式不同步。这是一个不在这里讨论/质疑的假设。我正在寻找一种可以帮助检测此类情况的工具。

您知道可以进行健全性检查的 npm 功能或第三方工具吗package-lock.json?例如,它应该解决所有传递依赖项,并检查锁定文件中是否提到了它们,并且其版本在正确的 semver 范围内。npm i它应该告诉您为了更新锁定文件而运行是否有意义,或者是否会为您提供(考虑传递性)npm ci中定义的所有所需的依赖项。package.json

我认为这npm --loglevel verbose install --dry-run将是一个合理的候选者,但它的输出没有提到package-lock.json如果它在没有--dry-run. 当然,一种选择是运行npm i然后git diff package-lock.json(或类似的),但这很脏。

Man*_*lon 4

npm ls --depth 1进行这些检查:

例如,这是输出:

+-- UNMET DEPENDENCY fastify@^2.0.0
+-- foo@0.0.7 extraneous
`-- got@10.3.0
  +-- @sindresorhus/is@1.2.0
  +-- @szmarczak/http-timer@4.0.0
  +-- @types/cacheable-request@6.0.1
  +-- cacheable-lookup@0.2.2
  +-- cacheable-request@7.0.1
  +-- decompress-response@5.0.0
  +-- duplexer3@0.1.4
  +-- get-stream@5.1.0
  +-- lowercase-keys@2.0.0
  +-- mimic-response@2.0.0
  +-- p-cancelable@2.0.0
  +-- responselike@2.0.0
  +-- to-readable-stream@2.1.0
  `-- type-fest@0.9.0

npm ERR! missing: fastify@^2.0.0, required by asd@1.0.0
npm ERR! extraneous: foo@0.0.7
Run Code Online (Sandbox Code Playgroud)

我这样做:

npm init --yes
npm i got
npm i foo
// removed foo manually from package json
// added fastify manually to package json
Run Code Online (Sandbox Code Playgroud)

  • 不,这只是输出的问题。完整的深度树可能很难阅读 (2认同)