Javascript 如何从中仅更新子依赖的lodash包(babel/core所需的依赖包)lodash@4.17.19至v4.17.21

Javascript 如何从中仅更新子依赖的lodash包(babel/core所需的依赖包)lodash@4.17.19至v4.17.21,javascript,angular,npm,lodash,angular-localize,Javascript,Angular,Npm,Lodash,Angular Localize,最近,lodashpackage在github页面上报告了一个安全漏洞问题。你可以在这里找到详情 lodash的最新版本具有命令注入(CVE-2021-23337)的安全漏洞。 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-23337 https://snyk.io/vuln/SNYK-JS-LODASH-1040724 包lodash的所有版本;包org.fujion.webjars:lodash的所有版本都容易通过模板进行命令

最近,
lodash
package在github页面上报告了一个安全漏洞问题。你可以在这里找到详情

lodash的最新版本具有命令注入(CVE-2021-23337)的安全漏洞。 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-23337 https://snyk.io/vuln/SNYK-JS-LODASH-1040724 包lodash的所有版本;包org.fujion.webjars:lodash的所有版本都容易通过模板进行命令注入。 他们已经解决了这个问题,它的修复程序出现在lodash v4.17.21中。 我使用的是角度为10的版本。我不是直接使用lodash,而是angular软件包中的一个,
@angular/localize@10.0.7
内部使用uses
@babel/core@7.8.3
这个巴别塔内部使用
lodash@4.17.19


Angular用户将在其最新版本中更新版本号,目前,我不想升级到Angular的最新版本。因此,我的问题是如何仅更新lodash包,它是一个依赖于子级的(babel/core所需的依赖性包)lodash@4.17.19到v4.17.21?

npm update lodash
帮了我的忙

$ npm -v
7.6.0
$ npm ls lodash  
temp@1.0.0 /Users/trott/temp
└─┬ @angular/localize@10.2.4
  └─┬ @babel/core@7.8.3
    ├─┬ @babel/traverse@7.13.0
    │ └── lodash@4.17.19 deduped
    ├─┬ @babel/types@7.13.0
    │ └── lodash@4.17.19 deduped
    └── lodash@4.17.19

$ npm update lodash

changed 1 package, and audited 99 packages in 1s

6 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
$ npm ls lodash
temp@1.0.0 /Users/trott/temp
└─┬ @angular/localize@10.2.4
  └─┬ @babel/core@7.8.3
    ├─┬ @babel/traverse@7.13.0
    │ └── lodash@4.17.21 deduped
    ├─┬ @babel/types@7.13.0
    │ └── lodash@4.17.21 deduped
    └── lodash@4.17.21

$
这并不是您所要求的,因为它更新到最新的
lodash
,满足您的依赖项的要求,而不是特定的
4.17.21
。恰好(在撰写本文时),
@angular/localize
的最新版本是
4.17.21
。如果您真的需要一个不是最新版本的特定版本来满足您的依赖性,请继续阅读


假设您想要更新到
4.17.20
。您可以尝试
npm更新lodash@4.17.20
。唉,这行不通。该命令运行正常,但不更新任何内容。在这种情况下,您必须
npm安装lodash@4.17.20
首先。这也将更新所有依赖项(假设
4.17.20
满足它们的要求)。然后
npm卸载lodash@4.17.20
将其从您的直接依赖项中删除。

感谢@Trott的回答。我尝试过这种方法,它确实下载了lodash的最新软件包版本,即4.17.21。但是,真正让我头疼的是babel/core的Requirements中提到的lodash版本仍然在package.lock.json中显示包版本为4.17.19。它的版本是^4.17.19,但js文件的版本是4.17.21。为什么没有更新呢?嗯……当我做上面的
npmls
时,它显示了lodash 4.17.21的所有内容,包括
babel/core
依赖项。我认为,
bable/core
不更新其依赖项的唯一原因是,是否有其他依赖项需要在4.17.19而不是4.17.21中使用lodash。这似乎意味着有一个依赖项将lodash锁定在4.17.19。更新后,npm ls lodash的输出是什么?您正在运行哪个版本的npm?npm ls lodash显示了更新为最新版本4.17.21的软件包。我运行的npm版本是6.14.6,当你说
包锁。json
显示
lodash
4.17.19,用于
babel/core
,你看到这样的东西了吗<代码>“lodash”:“^4.17.19”或者您是否在某处看到
“版本”:“4.17.19”
?它是“lodash”:“^4.17.19”
$ npm -v
7.6.0
$ npm ls lodash  
temp@1.0.0 /Users/trott/temp
└─┬ @angular/localize@10.2.4
  └─┬ @babel/core@7.8.3
    ├─┬ @babel/traverse@7.13.0
    │ └── lodash@4.17.19 deduped
    ├─┬ @babel/types@7.13.0
    │ └── lodash@4.17.19 deduped
    └── lodash@4.17.19

$ npm update lodash

changed 1 package, and audited 99 packages in 1s

6 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
$ npm ls lodash
temp@1.0.0 /Users/trott/temp
└─┬ @angular/localize@10.2.4
  └─┬ @babel/core@7.8.3
    ├─┬ @babel/traverse@7.13.0
    │ └── lodash@4.17.21 deduped
    ├─┬ @babel/types@7.13.0
    │ └── lodash@4.17.21 deduped
    └── lodash@4.17.21

$