Следует ли зафиксировать папку node_modules в Git?

Хороший вопрос. Есть плюсы и минусы. Я обсуждаю эту тему, чтобы вы могли составить собственное мнение.

Следует ли зафиксировать папку node_modules в Git?

Я упоминаю Git, но то же самое относится к любой системе контроля версий, которую вы используете.

Хороший вопрос. Есть плюсы и минусы.

Я предлагаю по умолчаниюнетзафиксируйте папку node_modules и вместо этого добавьте ее в свой.gitignoreфайл.

Возможно, у вас есть особые потребности, которые отменяют это решение.

Я обсуждаю эту тему, чтобы вы могли составить собственное мнение.

Вот несколько аргументов в пользу отказа от фиксации node_modules

Вы держите свою историю Git в чистоте. Когда вы добавляете новый пакет, вы сохраняетеpackage.jsonиpackage-lock.jsonфайл изменяется. Когда вы решите обновить версию пакета, все, что вы сохраните, - этоpackage-lock.jsonизменение файла.

package-lock.json- относительно новая функция npm, которая устарелатермоусадочная пленкакоманда использовалась в прошлом

Вам не придется помещать в репозиторий, возможно, сотни мегабайт зависимостей, а это означает, что со временем с ним будет работать быстрее. Переключение ветвей и проверка кода - это две операции, на которые сильно влияет размер репозитория.

При работе с ветвями у вас могут возникнуть конфликты слияния, которые выходят за рамки вашего кода и вместо этого включают код зависимостей. С этим неприятно иметь дело, и вы можете потерять много времени. Избегая размещения

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

Модули собственных узлов необходимо перекомпилировать, если вы развертываете платформу, отличную от вашей машины разработки (типичный вариант использования: вы разрабатываете на Mac, развертываете в Linux). Вам нужно позвонитьnpm rebuild, что приводит к рассинхронизации сервера.

Отсутствие фиксации node_modules подразумевает, что вам нужно перечислить все свои модули вpackage.jsonpackage-lock.json) как обязательный шаг. Это здорово, потому что у вас может не хватить усердия для этого, и некоторые операции npm могут сломаться, если вы этого не сделаете.

Совет: нет необходимости использовать конкретную версию в вашемpackage.jsonфайла, не более с момента введенияpackage-lock.jsonфайл.

Если вы используете отдельныеdependenciesиdevDependenciesнаборы, совершаяnode_modulesпапка вы в основном передаетеdevDependenciesи нет (простого) способа избавиться от них в производственной сборке.

Причины, которые могут привести вас к фиксации node_modules, и способы их устранения

Annpmпакет может быть удален его автором из реестра npm. Так случилось со знаменитымleft-pad incident in 2016 (прочитайте больше). С популярными пакетами такое случается очень редко. Если это произойдет, возможно, у вас больше не будет доступа к этой конкретной функции.

Вы также можете возразить, чтоnpmне гарантируется, что он останется на неопределенный срок, он может исчезнуть, поэтому простой способ гарантировать наличие полного кода вашего приложения в будущем - это зафиксировать его вместе с вашим приложением.

Каждый раз, когда вы используете пакет, создавайте вилку на GitHub. Время от времени обновляйте информацию о происхождении (можно автоматизировать).

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

Вы можете использовать частный сервер репозитория для своего проекта и использовать его для размещения всех ваших зависимостей.

Варианты включают

Еще одна причина для фиксации зависимостей - это возможность быстро редактировать код, если вы обнаружите ошибку или хотите что-то добавить в библиотеку.

Это палка о двух концах: если вы сделаете это, вы потеряете возможность обновлять пакет при выпуске новых выпусков, и это просто полезно для быстрых временных исправлений.

Оптимальное решение - либо отправить PR, который делает то, что вы хотите, с исходным проектом, либо создать его вилку и использовать вилку в качестве зависимости.

Скачать мою бесплатнуюСправочник по Node.js


Дополнительные руководства по узлам: