Следует ли вам зафиксировать папку node_modules в Git?
Я упоминаю об этом, но то же самое относится к любой системе контроля версий, которую вы используете
Это хороший вопрос, который стоит задать. Есть свои плюсы и минусы.
Я предлагаю по умолчанию не фиксировать папку node_modules, а вместо этого добавить ее в свой .gitignore файл.
У вас могут быть особые потребности, которые отменяют это решение.
Я обсуждаю эту тему, чтобы вы могли составить свое собственное мнение.
Вот несколько аргументов в пользу отказа от фиксации node_modules
Ты держишь свою мерзавскую историю в чистоте. Когда вы добавляете новый пакет, вы сохраняете package.json и блокировка пакета.json изменения файла. Когда вы решаете обновить версию пакета, все, что вы сохраняете, – это изменение файла package-lock.json .
package-lock.json является относительно новой функцией npm, которая устарела после команды shrinkwrap , использовавшейся в прошлом
Вы избегаете необходимости помещать, возможно, сотни МБ зависимостей в свой репозиторий, а это означает, что со временем с ним будет работать быстрее. Переключение ветвей и проверка кода – это 2 операции, на которые сильно влияет размер хранилища.
При работе с ветвями у вас могут возникнуть конфликты слияния, которые выходят за рамки вашего кода и вместо этого включают код зависимостей. С этим нехорошо иметь дело, и это может заставить вас потерять много времени. Избегая класть
Запрос на извлечение или слияние при изменении зависимостей приведет к тому, что в процессе будет задействовано гораздо больше файлов. Инструменты становятся медленнее или даже решают не показывать полное различие (например, GitHub)
Модули собственного узла необходимо перекомпилировать, если вы развертываете на платформе, отличной от вашей машины разработки (общий случай использования: вы разрабатываете на Mac, развертываете на Linux). Вам нужно вызвать npm rebuild , который выводит сервер из синхронизации.
Отсутствие фиксации node_modules подразумевает, что вам нужно перечислить все ваши модули в package.json (и package-lock.json ) в качестве обязательного шага. Это здорово, потому что у вас может не хватить усердия для этого, и некоторые операции npm могут прерваться, если вы этого не сделаете.
Совет: нет необходимости использовать конкретную версию в вашем файле package.json , больше не нужно с момента введения файла package-lock.json .
Если вы используете отдельные зависимости и Зависимости от разработчиков устанавливает, фиксируя папку node_modules вы в основном совершаете Зависимости от разработчиков и для производственной сборки нет (простого) способа избавиться от них.
Причины, которые могут привести к фиксации node_modules, и способы их устранения
Пакет npm может быть удален его автором из реестра npm. Это произошло со знаменитым левым блокнотом инцидентом в 2016 году ( подробнее ). Это очень редко случается с популярными пакетами. Если это произойдет, у вас может больше не быть доступа к этой конкретной части функциональности.
Вы также можете возразить, что npm не гарантируется, что он будет существовать бесконечно, он может исчезнуть, поэтому простой способ гарантировать наличие полного кода вашего приложения в будущем – зафиксировать его вместе с вашим приложением.
Каждый раз, когда вы используете пакет, создавайте вилку на GitHub. Время от времени обновляйте его с помощью источника (может быть автоматизирован).
Это не всегда практично, так как пакеты могут иметь десятки собственных зависимостей.
Вы можете использовать частный сервер репозитория для своего проекта и использовать его для размещения всех ваших зависимостей.
Варианты включают в себя
Еще одной причиной для фиксации зависимостей является возможность быстрого редактирования кода, если вы обнаружите ошибку или хотите что-то добавить в библиотеку.
Это обоюдоострый меч: если вы сделаете это, вы потеряете возможность обновлять пакет, если будут выпущены новые версии, и это просто хорошо для быстрых временных исправлений.
Оптимальное решение – либо отправить PR, который делает то, что вы хотите, в исходный проект, либо разветвить его и использовать свою вилку в качестве зависимости.
Оригинал: “https://flaviocopes.com/should-commit-node-modules-git/”