Как я могу обновить только пакет Lodash, зависимый от дочернего элемента (требуемый пакет зависимостей для babel / core) из lodash@4.17.19 к версии 4.17.21

#javascript #angular #npm #lodash #angular-localize

#javascript #угловой #нпм #Lodash #angular-локализовать

Вопрос:

Недавно lodash пакет сообщил о проблеме с уязвимостью системы безопасности на странице github. Вы можете найти подробную информацию здесь. https://github.com/lodash/lodash/issues/5083 .

Эта последняя версия 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 4.17.21. Я использую версию Angular 10. Я не использую Lodash напрямую, но один из пакетов angular, который используется @angular/localize@10.0.7 внутри, использует @babel/core@7.8.3 и использует этот babel внутри lodash@4.17.19 .

Пользователи Angular обновят номер версии в своей последней версии, и в настоящее время я не хочу обновляться до последней версии angular. Поэтому мой вопрос заключается в том, как я могу обновить только пакет Lodash, дочерний зависимый (требуемый пакет зависимостей для babel / core) из lodash@4.17.19 к v4.17.21?

Ответ №1:

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 is 4.17.21 . Если вам действительно нужна конкретная версия, которая не является последней и удовлетворяет вашим зависимостям, читайте дальше.

Предположим, гипотетически, вы хотели обновить до 4.17.20 . Вы могли бы попробовать npm update lodash@4.17.20 . Увы, это не работает. Команда выполняется нормально, но ничего не обновляет. В этом случае вам придется npm install lodash@4.17.20 сначала. Это также обновит все ваши зависимости (при 4.17.20 условии, что они удовлетворяют их требованиям). Затем npm uninstall lodash@4.17.20 , чтобы удалить его из ваших прямых зависимостей.

Комментарии:

1. Спасибо @Trott за ваш ответ. Я попробовал этот подход, и он действительно загрузил последнюю версию пакета Lodash, которая является 4.17.21. Но что меня действительно беспокоит, так это версия Lodash, упомянутая в requirements of babel / core, по-прежнему показывает версию пакета как 4.17.19 в package.lock.json. Будет ли это просто версия с номером ^ 4.17.19, но файлы js будут иметь номер 4.17.21. Почему тоже не обновился?

2. Хммм… Когда я делаю npm ls выше, он показывает Lodash 4.17.21 для всего, включая babel/core зависимость. Единственная причина, по которой я могу думать о bable/core том, чтобы не обновлять его зависимость, — это если есть какая-то другая зависимость, для которой требуется Lodash в 4.17.19, а не 4.17.21. Что, по-видимому, означает, что существует зависимость, которая блокирует Lodash ровно на 4.17.19. Каков результат npm ls lodash после выполнения обновления? И какую версию npm вы используете?

3. ну, «npm ls Lodash» показывает пакеты, обновленные до последней версии, которая является 4.17.21. Версия, на которой я использую npm, равна 6.14.6

4. Когда вы говорите package-lock.json , что отображается lodash 4.17.19 для babel/core , вы видите что-то подобное? "lodash": "^4.17.19" Или ты "version": "4.17.19" где-то видишь?

5. Это «Lodash»: «^ 4.17.19»