Должен ли я полагаться на package.json или поддерживать контроль версий на моих модулях узлов?

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

Я выяснил, что каждый раз, когда я npm install с одним и тем же node_modules установленная папка node_modules может быть не такой. Это может быть связано с тем, что у нас есть префикс ^ или ~ перед некоторыми версиями модулей. Кроме того, установленные модули также имеют свои собственные зависимости, которые могут быть обновлены сами по себе.

Поэтому дело касается проблемы. Должен ли я использовать package.json для управления версиями?

В соответствии с здесь: Почему нам нужно использовать package.json? , он сказал, что package.json provides a simple way for people to keep track of packages they use in their application.

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

Единственное решение, на мой взгляд, следующее: мы должны сделать контроль версий на node_modules. Если это так, package.json становится бессмысленным?

Итак, я хотел бы знать, что такое промышленная практика для контроля версий в node_modules и package.json ?

Solutions Collecting From Web of "Должен ли я полагаться на package.json или поддерживать контроль версий на моих модулях узлов?"

Если вы используете версию NPM до 5, тогда вы должны изучить Shrinkwrap NPM . Это блокирует версии модулей NPM, которые вы используете в настоящее время. После того, как они были npm install в проект, если кто-либо еще npm install они получат точные версии, указанные в термоусадочной упаковке.

NPM-Shrinkwrap
Заблокировать версии зависимостей для публикации

С выпуском NPM 5 он автоматически создает файл package-lock.json , похожий на shrinkwrap, когда вы запускаете npm install по умолчанию. Вы должны зафиксировать файлы блокировки или shinkwrap в SCM.

Вы также должны заглянуть в пряжу . Пряжа выходит из коробки с файлом yarn.lock который работает одинаково, но с дополнительными скоростями производительности и автономными возможностями.

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

Если у вас уже есть папка project и node_modules и вы хотите изменить Yarn без установки всех модулей снова, вы можете запустить yarn import который будет генерировать файл блокировки на основе ваших текущих папок модулей узлов.

Оба вышеупомянутых решения означают, что вам не нужно добавлять ваши node_modules в SCM – это может добавить другие сложности, когда пользователи на разных платформах (windows, mac и т. Д.) Работают над проектом. Файлы блокировки должны быть зафиксированы в вашем проекте.