Лучшая практика в отношении зависимостей - PullRequest
1 голос
/ 03 апреля 2019

Какова наилучшая практика при сохранении зависимостей package.json?

Например, я вижу, что множество зависимостей не исправлено, например:

  "tslint": "~5.11.0"

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

У меня мало знаний о package-lock.json и shrinkwrap, но я не уверен насчет "лучшей практики" вэтот.На этот случай есть приложение Angular, но оно может быть всем.Например, сохранение пакета-lock.json в репозитории вызывало некоторые проблемы в прошлом (я знаю! Лучше всего это продвигать!)

Есть мысли?

1 Ответ

2 голосов
/ 29 мая 2019

Краткий ответ: Каретки (^) и фиксация ваших 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. Это соответствует вашему требованию о фиксированных зависимостях и дает несколько других преимуществ, поэтому лучше делать то, что стандартно, если только у вас нет другой причины для изменения.

...