#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»