Я заметил, что иногда одна использованная старая подчиненная зависимость становится по умолчанию, в то время как более часто используемые sh становятся вложенными.
Например, я установил dep package-1
, который имеет sub dep package-2@^1.0.0
.
Теперь, когда я устанавливаю другие пакеты, которые package-2@^2.0.0
используются более широко, я все еще вижу, что package-2@^1.0.0
- это sub dep по умолчанию, даже если он используется только один раз, когда package-2@^2.0.0
установлен несколько раз в другие внутри других установленных пакетов (aka deduped
)
Я хочу видеть package-2@^1.0.0
дедупликации, потому что он используется только один раз, в то время как package-2@^2.0.0
должно быть по умолчанию.
Чтобы избежать Философия, я приведу реальный пример с репо .
Чтобы можно клонировать репо или сделать это самостоятельно с помощью
npm i -D @types/jest-environment-puppeteer@^4.3.1
npm i -D jest@^25.5.3
Теперь давайте проверим пакет: lock. json для основного депозита для @jest/types
Как видите, по умолчанию используется значение @jest/types@24.9.0
.
Давайте проверим, сколько раз оно используется Как видите, только 9 раз
Давайте проверим использование `@ jest / types @ ^ 25. 91 раз, что означает, что разумнее установить его по умолчанию, а не дедуплицировать, что означает, что мы устанавливаем его внутри каждого родителя, где это необходимо.
Я сделал ручная оптимизация, чтобы поменять их местами в package-lock. json. Я сохраняю его в optimized
ветви.
Когда я переключаюсь с master
ветви на optimized
и запускаю npm i
, я вижу следующий вывод
добавлено 142 пакета из 65 участники, удалили 529 пакетов, обновили 48 пакетов и проверены 275145 пакетов за 7,541 с
Это означает, что у меня 529 - 142 = 387 дополнительных пакетов из-за этой проблемы только для 2 операций.
Это может стать еще более проблематичным c со всей современной инфраструктурой внешнего интерфейса (webpack
babel
et c).
Есть ли способ сообщить npm, чтобы оптимизировать использование дедуплированных зависимостей