Предположим, что все ссылки в package.json - ^ 1.0.0, и я только поднимаю версию патча.
У меня есть A, зависящий от B, зависящий от C: A> B> C. Я восстанавливаю A и замечаю, что версия CI get публикуется после B. Я ожидал, что последняя версия C была опубликована до B будет восстановлено, но я действительно получил версию C, опубликованную после B.
Затем я опубликовал пустующий патч C и попытался обновить A, ожидая увидеть новую версию C. Однако ничего не изменилось; Версия C, восстановленная с помощью A, была той же версией, которую я получил до того, как опубликовал новую версию C.
Итак, учитывает ли NPM время публикации пакетов при восстановлении зависимостей вида ^ 1.0.0?
Начиная с npm@2.6.1, обновление npm будет проверять только пакеты верхнего уровня. Предыдущие версии npm также рекурсивно проверяли все зависимости. Чтобы получить старое поведение, используйте npm --depth 9999 update.
Я использую 6.4.1, поэтому я не получаю рекурсивное поведение по умолчанию. Используя флаг глубины, я вижу, что C обновлен до новой версии.
Однако это все еще не объясняет, почему версия C, опубликованная после B, была синхронизирована в первую очередь; При первой синхронизации, даже если я не передал флаг глубины, NPM должен восстановить все зависимости. Какую политику он применяет во время этой начальной синхронизации?
Теперь, если я удаляю папку node_modules
и запускаю npm install
, я последовательно получаю новую версию C. Как будто npm вспомнил, что я ранее запускал обновление npm с флагом глубины, однако я не нахожу записи, которую я сделал это в packages.json, так как C не указан в A packages.json.