【问题标题】:How do I manually `npm audit fix` a single security issue?如何手动“npm audit fix”单个安全问题?
【发布时间】:2021-06-01 05:07:35
【问题描述】:

npm audit 报告了许多问题,通过运行npm audit fix 它确实解决了其中几个问题。但是,出于某种原因,这样做也会破坏我的构建。我想我知道是哪个修复程序导致了这个问题,但我仍然想修复其他个问题。

有没有办法让 npm 在我运行 npm audit fix 时执行它所做的任何事情,但仅针对单个问题/依赖项?


我知道我运行npm i,但这也将更新的依赖项添加到package.json(即使带有--package-lock-only 标志),这是我不想要的。我只想让 npm 更新 package-lock.json,就像我运行 npm audit fix 时所做的那样,但只是针对部分问题。

【问题讨论】:

    标签: npm package.json npm-audit


    【解决方案1】:

    您应该可以在这里使用npm update 来实现您想要的。根据您使用的是npm 7.x 还是npm 6.x,具体操作会略有不同。我使用的是 7.x,所以这就是我在下面显示的内容。

    假设npm audit 产生如下输出:

    # npm audit report
    
    minimist  <0.2.1 || >=1.0.0 <1.2.3
    Prototype Pollution - https://npmjs.com/advisories/1179
    fix available via `npm audit fix`
    node_modules/extract-zip/node_modules/minimist
      mkdirp  0.4.1 - 0.5.1
      Depends on vulnerable versions of minimist
      node_modules/extract-zip/node_modules/mkdirp
        extract-zip  <=1.6.7
        Depends on vulnerable versions of mkdirp
        node_modules/extract-zip
    
    3 low severity vulnerabilities
    
    To address all issues, run:
      npm audit fix
    

    这表示我们需要更新minimist、mkdirp和extract-zip。

    让我们通过npm ls 了解我们正在处理的版本和依赖项。

    $ npm ls minimist mkdirp extract-zip  
    scrape-text@1.0.0 /Users/trott/ucsf-ckm/scrape-text
    ├─┬ puppeteer@2.1.1
    │ └─┬ extract-zip@1.6.7
    │   └─┬ mkdirp@0.5.1
    │     └── minimist@0.0.8
    └─┬ semistandard@14.2.0
      ├─┬ eslint@6.4.0
      │ ├─┬ file-entry-cache@5.0.1
      │ │ └─┬ flat-cache@2.0.1
      │ │   └─┬ write@1.0.3
      │ │     └── mkdirp@0.5.3 deduped
      │ └─┬ mkdirp@0.5.3
      │   └── minimist@1.2.5 deduped
      └─┬ standard-engine@12.0.0
        └── minimist@1.2.5
    
    $ 
    

    因为着色很重要,所以这是最后一张的截图:

    让我们看看如果我们运行npm update minimist 来更新那个包会发生什么。让我们使用npm ls minimist 看看是否有任何变化。 (您还可以查看您的 package-lock.json 文件是否已更改并进行比较。)

    $ npm ls minimist
    scrape-text@1.0.0 /Users/trott/ucsf-ckm/scrape-text
    ├─┬ puppeteer@2.1.1
    │ └─┬ extract-zip@1.6.7
    │   └─┬ mkdirp@0.5.1
    │     └── minimist@0.0.8
    └─┬ semistandard@14.2.0
      ├─┬ eslint@6.4.0
      │ └─┬ mkdirp@0.5.3
      │   └── minimist@1.2.5 deduped
      └─┬ standard-engine@12.0.0
        └── minimist@1.2.5
    
    $ 
    

    不,没有变化。我们仍然拥有与以前相同的版本。好的,让我们试试下一个mkdirp。

    $ npm update mkdirp
    
    changed 1 package, and audited 244 packages in 1s
    
    3 low severity vulnerabilities
    
    To address all issues, run:
      npm audit fix
    
    Run `npm audit` for details.
    $
    

    changed 1 package 看起来很有希望。让我们看看它做了什么:

    $ npm ls mkdirp    
    scrape-text@1.0.0 /Users/trott/ucsf-ckm/scrape-text
    ├─┬ puppeteer@2.1.1
    │ └─┬ extract-zip@1.6.7
    │   └── mkdirp@0.5.1
    └─┬ semistandard@14.2.0
      └─┬ eslint@6.4.0
        ├─┬ file-entry-cache@5.0.1
        │ └─┬ flat-cache@2.0.1
        │   └─┬ write@1.0.3
        │     └── mkdirp@0.5.5 deduped
        └── mkdirp@0.5.5
    
    

    将mkdirp 更新为 0.5.5。您可以对其进行测试,看看是否仍然有效。

    如果您现在执行npm update extract-zip,这将导致干净的npm audit 运行。

    希望这能让您了解如何在不修改package.json 的情况下一次更新一个包。祝你好运!

    【讨论】:

      猜你喜欢
      • 2020-02-10
      • 1970-01-01
      • 2023-01-04
      • 2021-08-14
      • 2020-07-05
      • 2021-04-27
      • 2021-07-02
      • 1970-01-01
      • 2020-08-08
      相关资源
      最近更新 更多