7

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

有没有办法让 npm 在我运行时执行任何操作npm audit fix,但仅针对单个问题/依赖项?


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

4

1 回答 1

10

您应该可以在这里使用npm update来实现您想要的。根据您使用的是npm7.x 还是npm6.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

这表明我们需要更新minimistmkdirpextract-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在此过程中进行修改。祝你好运!

于 2021-05-31T21:07:35.337 回答