Краткий ответ: Каретки (^
) и фиксация ваших package-lock.json
, вероятно, ваш лучший подход. Это гарантирует, что разработчики всегда получают одинаковые зависимости, и это наименее удивительно.
Почему package-lock.json
?
npm специально рекомендует вам зафиксировать package-lock.json
.
Настоятельно рекомендуется передать сгенерированную блокировку пакета в систему управления версиями: это позволит всем членам вашей команды, вашим развертываниям, вашей CI / непрерывной интеграции и всем, кто запускает npm, установить в исходный код вашего пакета, чтобы получить точную то же дерево зависимостей, на котором вы разрабатывали.
(из документации npm )
Вы упомянули, что добавление package-lock.json
в ваш репозиторий вызвало некоторые проблемы в прошлом. Я предполагаю, что это произошло из-за этой проблемы , когда блокировка пакета игнорировалась и перезаписывалась каждый раз, когда кто-либо устанавливал что-либо. Это было не правильное поведение и было исправлено в npm@5.4.2, согласно этому ответу .
Что вы должны не сделать, это пропустить package-lock.json
и просто указать точные версии в вашем package.json
. Если вы сделаете это, ваши зависимости верхнего уровня будут выглядеть красиво и согласованно, но их зависимости не будут иметь заблокированных версий. Таким образом, вы почти наверняка столкнетесь с ошибками, но их будет сложнее найти.
Почему бы не npm-shrinkwrap.json
?
Вы также упоминаете файлы термоусадочной пленки. Файлы термоусадочной пленки предназначены для
приложения, развернутые в процессе публикации в реестре
(из документации npm )
Вы, вероятно, не npm publish
используете свое угловое веб-приложение, поэтому нет смысла использовать npm-shrinkwrap.json
.
Зачем использовать каретки?
Я не могу найти никаких документов, говорящих о том, что диапазоны карет (^
) - лучшая практика, но я верю, что это так.
npm
делает интервалы кареток опцией по умолчанию, поэтому ясно, что они считают это лучшей практикой, хотя я не могу найти ни одной из их документации, чтобы это оправдать.
Использование значения по умолчанию - наименее удивительный подход. Если бы я увидел любую другую версию в package.json
, я бы предположил, что она была изменена по уважительной причине, и не решился бы обновить пакет, не зная, что это за причина, даже если ее действительно нужно было обновить.
Если вы когда-нибудь решите обновить все свои зависимости одновременно, диапазоны каретки будут вам полезны. Ваши зависимости обычно блокируются, но удаление package-lock.json
и повторный запуск npm install
автоматически установят последние версии, которые предположительно обратно совместимы с указанными вами версиями (см. документацию по npm для получения подробной информации о диапазон каретки).
Таким образом, стандартно используются диапазоны каретки и package-lock.json
. Это соответствует вашему требованию о фиксированных зависимостях и дает несколько других преимуществ, поэтому лучше делать то, что стандартно, если только у вас нет другой причины для изменения.