Как мне исправить уязвимый пакет npm в моем package-lock.json, которого нет в package.json?

91

Github сообщает мне, что зависимость в моем файле package-lock.json уязвима и устарела. Проблема в том, что если я сделаю npm installили npm update, ни один из них не обновит зависимость в файле package-lock.json.

Я много гуглил по этому поводу, а также удалил файл и сделал npm install.

Если кто-то может помочь решить эту проблему, я очень признателен. Речь идет о пакете Hoek, которого у меня нет в моем файле package.json.

Спасибо заранее.

Raph117
источник
2
попробуйте удалить файл package-lock.json и снова запустить npm install
Ришикеш Дхокаре,
1
Вы можете проверить свои зависимости, чтобы узнать, какая из них зависит от hoek, и обновить ее. (Но вам также может не повезти, и эта зависимость не имеет более новой версии.)
Роланд Старк,
Я бы посоветовал то же самое с @RishikeshDhokare
xpto
Я сделал, как сказал @RishikeshDhokare. Проблема решена для себя
мелих сахин

Ответы:

41

Похоже, что Hoek является зависимостью одной из ваших зависимостей (так, пакет, который у вас есть в вашем package.json, требует его от собственного package.json).

Вы уже безуспешно пытались удалить / переустановить и обновить зависимости проекта, поэтому кажется, что для рассматриваемой зависимости пакета указана явная или максимальная версия.

Не видя package.json для каждой из ваших зависимостей, было бы сложно дать дальнейшие советы о том, как принудительно обновить.

Изменить: чтобы помочь вам определить, какие пакеты используют какие зависимости, вы можете использовать lsкоманду NPM : https://docs.npmjs.com/cli/ls

Например, чтобы узнать, какие пакеты используют Hoek: npm ls hoek

Изменить 2: Как правильно указывает Ulysse BN, если у вас есть NPM версии 6 или новее, вы можете использовать, npm audit fixчтобы попросить NPM попытаться исправить уязвимости для вас.

Изменить 3: Те, кто это читают, также должны проверить ответ JBallin ниже. Он расширяет информацию, которую я здесь дал, и является (на мой взгляд) более структурированным ответом, который лучше отвечает на вопрос OP. Однако - если вы хотите быстро исправить - этого ответа должно хватить.

Алекс Мульчинок
источник
3
У меня аналогичная проблема с другим пакетом (Growl). Я предполагаю, что это какая-то моя версия чего-то, package.jsonчто зависит от конкретной (уязвимой) версии Growl. Ваш ответ находится на правильном пути, и вы, возможно, смогли бы его достичь, если бы вы могли поделиться командой, которая покажет, какие пакеты в package.jsonзависимости от уязвимого package-lock.json.
Fuhrmanator 08
См. Обновленный ответ. Если вам нужна дополнительная помощь - создайте новый вопрос. :)
Alex Mulchinock 08
Спасибо. Готово: stackoverflow.com/questions/50764225/…
Fuhrmanator 08
Вы уверены, что был задан дополнительный вопрос? Они кажутся дубликатами.
JBallin
@JBallin с тех пор мой ответ обновлялся несколько раз. Возможно, он изначально не считался дубликатом.
Alex Mulchinock
24

TL; DR: обновите родительский пакет, используя npm i $PARENT_PKG_NAME.


Заметка

При обновлении зависимостей вы должны просмотреть CHANGELOG на предмет критических изменений.

Диагностика

npm auditоткроет как уязвимый пакет (обратите внимание, что для этого вам понадобится файл package-lock.json, поэтому вам нужно будет запустить npm i), так и пакет, от которого он зависит (если применимо). Обратите внимание, что вы также можете использовать, npm ls $CHILD_PKG_NAMEчтобы увидеть его родительские зависимости.

Попытка быстрого исправления

npm audit fixи npm audit fix --forceстоит попробовать, но иногда это нужно делать вручную (см. ниже).

Ручное исправление

Скорее всего, родительский пакет уже исправил свои зависимости (вы можете проверить это, перейдя на их GitHub и просмотрев последние коммиты - или просто посмотрев, исправляет ли это это), поэтому вы можете просто запустить, npm i $PARENT_PKG_NAME @$NEW_VERSIONи он обновит вашу блокировку пакета .json.

Если родитель не исправил уязвимость

Если специалист по сопровождению не реагирует на запросы, вы можете рассмотреть возможность использования альтернативного пакета, который выполняет то же самое, или разветвления пакета и самостоятельного обновления уязвимости.

Проверить исправление

Теперь вы можете убедиться, что он работает, запустив его npm auditи убедившись, что уязвимостей нет. Зафиксируйте свои изменения, отправьте их на GitHub, обновите свои уведомления / предупреждения, и они должны исчезнуть!

JBallin
источник
Как насчет того, что в моем случае Quick Fix не работает ни руководство в этом ответе, поскольку родительский элемент - это структура, которая в обновлении полностью изменила API и даже избавилась от этой библиотеки? Это потому, что родительский фреймворк по-прежнему использует старую библиотеку. Действительно, старый все еще обслуживается, но не обновляется, я имею в виду, как я могу продолжить?
Carmine Tambascia
1
@CarmineTambascia, если пакет, который вы используете, не устраняет свои уязвимости (я бы открыл проблему / PR в надежде, что он будет исправлен) - я бы подумал о создании вашей собственной вилки пакета (ов), исправьте уязвимости в место пораженного пакета.
JBallin
есть ли способ обновить дочерний пакет? В случае, если родительский пакет не был исправлен на уязвимости?
Харшита,
@Harshita см. Раздел «Если родитель не исправил уязвимость»
JBallin
1
@ Харшита, ты с ними связался? В их интересах исправить и эти уязвимости.
JBallin,
6

Если у вас npm @ 6 или новее, вы можете использовать его npm audit fixдля решения ваших проблем с безопасностью.

Ulysse BN
источник
Существует множество различных инструментов, и у них нет одинаковых баз данных уязвимостей. Самым исчерпывающим я нашел Snytch.
Ulysse BN
2

Использование:

нпм я хук

npm установит последнюю версию hoek и ваш package.lock.json обновится.

скорпион
источник
0

У меня возникла эта проблема, и я обнаружил, что это произошло потому, что на сервере, на котором я запускал npm, была установлена ​​старая версия npm - package-lock.json поддерживается только более новыми версиями.

jvvw
источник
0

Вы пробовали это: перейдите в корень вашего проекта, удалите package-lock.jsonфайл node_modulesи .cacheпапки, а затем npm install.

CakeL
источник
0

Чтобы проверить уязвимые пакеты npm, просто используйте следующие команды:

npm audit

Чтобы исправить уязвимые пакеты npm, просто используйте следующие команды, которые также исправят package-lock.json:

npm audit fix
Джерри Чонг
источник
0

Отредактируйте package-lock.jsonвручную и обновите уязвимую версию пакета до исправленной, а затем используйте

npm ci

Это установит пакеты в соответствии package-lock.jsonс игнорированием в package.jsonпервую очередь. Затем используйте

npm audit fix

опять же, чтобы убедиться, правильно ли это сделано. Если это не помогает, используйте другие предложенные решения.

Дополнительная информация здесь:

https://blog.npmjs.org/post/171556855892/introduction-npm-ci-for-faster-more-reliable

или здесь: https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities

Одинокий, уединенный
источник
Дополнительным решением может быть: npmjs.com/package/npm-check-updates
Lonely
-3

После установки новых зависимостей выполните следующую команду, чтобы обновить файл package-lock.json:

npm update package-lock.json
SA911
источник