【问题标题】:Is there a tool to validate/check that package.json and package-lock.json are consistent?是否有工具可以验证/检查 package.json 和 package-lock.json 是否一致?
【发布时间】:2020-05-13 18:02:25
【问题描述】:

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

您知道可以对package-lock.json 进行完整性检查的 npm 功能或第三方工具吗?例如,它应该解析所有传递依赖,并检查它们是否都在锁定文件中被提及,并且版本在正确的 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(或类似的),但这很脏。

【问题讨论】:

    标签: node.js npm package.json package-lock.json


    【解决方案1】:

    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
    

    我做到了:

    npm init --yes
    npm i got
    npm i foo
    // removed foo manually from package json
    // added fastify manually to package json
    

    【讨论】:

    • 您建议使用--depth 1 的任何特殊原因?在我看来,我不会在依赖层次结构中看到问题。我弄错了吗?请注意,我并不害怕看到树有多深......
    • 不,这只是输出的问题。完整的深度树可能很难阅读
    猜你喜欢
    • 2020-01-19
    • 1970-01-01
    • 2020-09-24
    • 2019-07-23
    • 2018-07-05
    • 2017-12-16
    • 2018-10-06
    • 2019-03-10
    • 2019-09-05
    相关资源
    最近更新 更多