Должна ли упаковка JS иметь термоусадочную пленку?

Я понимаю, что с помощью npm shrinkwrap помогает заблокировать зависимости, чтобы гарантировать воспроизводимую сборку для приложения.

У меня вопрос, а что если вы создаете модуль вместо приложения? Должен ли каждый выпуск модуля включать npm-shrinkwrap.json? Я взглянул на некоторые модули с открытым исходным кодом и не видел их в своих репозиториях (например: экспресс, реакция, чай, асинхронность).

Насколько я понимаю, преимущество, которое npm (>=3) обеспечивает путем объединения совместимых версий. Например, если pkg-a зависит от lodash ^4.0.0 и pkg-b зависит от lodash ^4.3.5, он просто установит одну копию последней версии lodash 4. Но если бы в pkg-a и pkg-b были созданы термоусадочные пленки, скорее всего, они не соответствовали бы одной и той же версии lodash, и нужно было бы установить две копии библиотеки, даже если они полностью совместимы с выпусками.

Недостатком не включения термоусадочной пленки является то, что автор библиотеки создает пакет, на который будут опираться другие приложения, и который может выйти из строя в любое время, когда любая из его зависимостей (или рекурсивно зависимостей зависимостей) выпускает критическое изменение в несовершеннолетний или патч релиз. И в случае нарушения зависимости, автор библиотеки ничего не может сделать, кроме публикации термоусадочной пленки.

Например, если моя библиотека зависит от запроса, который зависит от hawk, и hawk выпускает критическое изменение в выпуске патча, то даже привязка к точной версии запроса не исправит мою библиотеку - единственный путь (насколько это возможно). как я вижу) исправить мою библиотеку - это опубликовать термоусадочную пленку, которая сокращает точную версию "ястреба".

Это становится многословным, но я пытаюсь понять, есть ли лучший аргумент для того, чтобы иметь сжатые обертки в модулях Node по сравнению с тем, чтобы использовать преимущества, которые npm предоставляет, не используя их.

0 ответов

Другие вопросы по тегам