Хороший вопрос. Есть плюсы и минусы. Я обсуждаю эту тему, чтобы вы могли составить собственное мнение.
Следует ли зафиксировать папку 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.json
(иpackage-lock.json
) как обязательный шаг. Это здорово, потому что у вас может не хватить усердия для этого, и некоторые операции npm могут сломаться, если вы этого не сделаете.
Совет: нет необходимости использовать конкретную версию в вашем
package.json
файла, не более с момента введенияpackage-lock.json
файл.
Если вы используете отдельныеdependencies
иdevDependencies
наборы, совершаяnode_modules
папка вы в основном передаетеdevDependencies
и нет (простого) способа избавиться от них в производственной сборке.
Причины, которые могут привести вас к фиксации node_modules, и способы их устранения
Annpm
пакет может быть удален его автором из реестра npm. Так случилось со знаменитымleft-pad
incident in 2016 (прочитайте больше). С популярными пакетами такое случается очень редко. Если это произойдет, возможно, у вас больше не будет доступа к этой конкретной функции.
Вы также можете возразить, чтоnpm
не гарантируется, что он останется на неопределенный срок, он может исчезнуть, поэтому простой способ гарантировать наличие полного кода вашего приложения в будущем - это зафиксировать его вместе с вашим приложением.
Каждый раз, когда вы используете пакет, создавайте вилку на GitHub. Время от времени обновляйте информацию о происхождении (можно автоматизировать).
Это не всегда практично, поскольку пакеты могут иметь десятки собственных зависимостей.
Вы можете использовать частный сервер репозитория для своего проекта и использовать его для размещения всех ваших зависимостей.
Варианты включают
- синопия
- npm_lazy
- npm-ленивое зеркало
- искусство
- npm Enterprise, от компании npm
Еще одна причина для фиксации зависимостей - это возможность быстро редактировать код, если вы обнаружите ошибку или хотите что-то добавить в библиотеку.
Это палка о двух концах: если вы сделаете это, вы потеряете возможность обновлять пакет при выпуске новых выпусков, и это просто полезно для быстрых временных исправлений.
Оптимальное решение - либо отправить PR, который делает то, что вы хотите, с исходным проектом, либо создать его вилку и использовать вилку в качестве зависимости.
Скачать мою бесплатнуюСправочник по Node.js
Дополнительные руководства по узлам:
- Введение в менеджер пакетов npm
- Введение в Node.js
- HTTP-запросы с использованием Axios
- Где разместить приложение Node.js
- Взаимодействовать с Google Analytics API с помощью Node.js
- Средство выполнения пакетов npx Node
- Руководство по package.json
- Где npm устанавливает пакеты?
- Как обновить Node.js
- Как использовать или выполнить пакет, установленный с помощью npm
- Файл package-lock.json
- Семантическое управление версиями с использованием npm
- Следует ли зафиксировать папку node_modules в Git?
- Обновите все зависимости Node до последней версии
- Разбор JSON с помощью Node.js
- Найдите установленную версию пакета npm
- Node.js потоки
- Установите старую версию пакета npm
- Получить текущую папку в Node
- Как зарегистрировать объект в Node
- Предоставление функциональности из файла узла с помощью экспорта
- Различия между узлом и браузером
- Сделайте HTTP-запрос POST с помощью Node
- Получить данные тела HTTP-запроса с помощью Node
- Буферы узлов
- Краткая история Node.js
- Как установить Node.js
- Сколько JavaScript вам нужно знать, чтобы использовать Node?
- Как использовать Node.js REPL
- Узел, принимать аргументы из командной строки
- Вывод в командную строку с помощью Node
- Принять ввод из командной строки в Node
- Удаление пакетов npm с помощью `npm uninstall`
- npm глобальные или локальные пакеты
- зависимости npm и devDependencies
- Цикл событий Node.js
- Понимание process.nextTick ()
- Понимание setImmediate ()
- Эмиттер событий узла
- Создайте HTTP-сервер
- Выполнение HTTP-запросов с помощью Node
- Модуль Node fs
- HTTP-запросы в Node с использованием Axios
- Чтение файлов с помощью Node
- Пути к файлам узлов
- Написание файлов с помощью Node
- Статистика файла узла
- Работа с файловыми дескрипторами в Node
- Работа с папками в Node
- Модуль пути к узлу
- Модуль Node http
- Использование WebSockets с Node.js
- Основы работы с MySQL и Node
- Обработка ошибок в Node.js
- Путеводитель по мопсу
- Как читать переменные среды из Node.js
- Как выйти из программы Node.js
- Модуль Node os
- Модуль событий узла
- Узел, разница между разработкой и производством
- Как проверить, существует ли файл в Node.js
- Как создать пустой файл в Node.js
- Как удалить файл с помощью Node.js
- Как получить дату последнего обновления файла с помощью Node.js
- Как определить, сегодня ли дата в JavaScript
- Как записать объект JSON в файл в Node.js
- Почему вам следует использовать Node.js в вашем следующем проекте?
- Запускайте веб-сервер из любой папки
- Как использовать MongoDB с Node.js
- Используйте Chrome DevTools для отладки приложения Node.js
- Что такое pnpm?
- Список параметров среды выполнения Node.js v8
- Как исправить ошибку «Отсутствует доступ для записи» при использовании npm
- Как включить модули ES в Node.js
- Как создать дочерний процесс с помощью Node.js
- Как получить в Express и разобранное, и необработанное тело
- Как обрабатывать загрузку файлов в Node.js
- Каковы одноранговые зависимости в модуле Node?
- Как написать файл CSV с помощью Node.js
- Как читать CSV-файл с помощью Node.js
- Модули ядра узла
- Увеличение номеров сразу нескольких папок с помощью Node.js
- Как распечатать холст по URL-адресу данных
- Как создать и сохранить изображение с помощью Node.js и Canvas
- Как скачать изображение с помощью Node.js
- Как массово переименовывать файлы в Node.js
- Как получить имена всех файлов в папке в Node
- Как использовать обещания и ожидания с функциями обратного вызова Node.js
- Как протестировать пакет npm локально
- Как проверить текущую версию Node.js во время выполнения
- Как использовать Sequelize для взаимодействия с PostgreSQL
- Обслуживайте HTML-страницу с помощью Node.js
- Как устранить ошибку `util.pump is not a function` в Node.js