The 2021 JavaScript Full-Stack Bootcamp is NOW OPEN FOR SIGNUPS!
Should you commit the node_modules folder to Git?
I mention Git but the same applies to any version control system you happen to use
That’s a good question to have. Istnieją plusy i minusy.
Sugeruję, że domyślnym rozwiązaniem jest nieprzekazywanie folderu node_modules, a zamiast tego dodanie go do pliku .gitignore
.
Możesz mieć specjalne potrzeby, które odwrócą tę decyzję.
Przedyskutowałem ten temat, abyś mógł wyrobić sobie własną opinię.
Istnieją pewne argumenty za nieprzekazywaniem node_modules
Utrzymasz czystą historię Git. Kiedy dodajesz nowy pakiet, przechowujesz zmiany plików package.json
i package-lock.json
.Kiedy zdecydujesz się zaktualizować wersję pakietu, wszystko, co przechowujesz, to zmiana pliku package-lock.json
.
package-lock.json
jest stosunkowo nową funkcją npm, która wyłącza polecenie shrinkwrap używane w przeszłości
Unikasz konieczności umieszczania prawdopodobnie setek MB zależności w swoim repozytorium, a to oznacza, że z czasem będzie szybciej pracować. Przełączanie gałęzi i sprawdzanie kodu to 2 operacje, na które ogromny wpływ ma rozmiar repozytorium.
Podczas pracy z gałęziami możesz mieć konflikty scalania, które wykraczają poza twój kod, a zamiast tego obejmują kod zależności. To nie jest miłe do czynienia z i może sprawić, że stracisz dużo czasu. Unikanie umieszczania
Prośba o pociągnięcie lub scalenie, jeśli zmienia zależności, będzie miała znacznie więcej plików zaangażowanych w proces. Narzędzia stają się wolniejsze lub nawet decydują się nie pokazywać pełnego diff (GitHub, na przykład)
Natywne moduły węzła muszą być przekompilowane, jeśli wdrażasz na platformę inną niż twoja maszyna deweloperska (częsty przypadek użycia: rozwijasz na Macu, wdrażasz na Linuksie). Musisz zadzwonić do npm rebuild
, co spowoduje, że serwer nie będzie zsynchronizowany.
Nie popełnienie node_modules implikuje, że musisz wymienić wszystkie swoje moduły w package.json
(i package-lock.json
) jako obowiązkowy krok. Jest to świetne, ponieważ możesz nie mieć staranności, aby to zrobić, a niektóre operacje npm mogą się zepsuć, jeśli tego nie zrobisz.
Wskazówka: nie ma potrzeby używania konkretnej wersji w pliku
package.json
, nie więcej od czasu wprowadzenia plikupackage-lock.json
.
Jeśli używasz oddzielnych zestawów dependencies
i devDependencies
, przez commitowanie folderu node_modules
w zasadzie popełniasz devDependencies
i nie ma (łatwego) sposobu na pozbycie się ich w produkcyjnym buildzie.
Powody, które mogą cię skłonić do popełnienia node_modules, i jak je złagodzić
Pakiet npm
może zostać usunięty przez jego autora z rejestru npm. Tak stało się ze słynnym incydentem left-pad
w 2016 roku (czytaj więcej). Jest to bardzo rzadkie, aby zdarzyć się dla popularnych pakietów. Jeśli tak się stanie, możesz nie mieć już dostępu do tego konkretnego fragmentu funkcjonalności.
Możesz również argumentować, że npm
nie ma gwarancji, że pozostanie w pobliżu w nieskończoność, może zniknąć, więc łatwym sposobem na zagwarantowanie posiadania pełnego kodu aplikacji w przyszłości jest commitowanie go wraz z twoją aplikacją.
Za każdym razem, gdy używasz pakietu, utwórz widelec na GitHubie. Raz na jakiś czas aktualizuj go z oryginałem (może być zautomatyzowany).
Nie zawsze jest to praktyczne, ponieważ pakiety mogą mieć dziesiątki własnych zależności.
Możesz użyć prywatnego serwera repozytorium dla swojego projektu i użyć tego do hostowania wszystkich swoich zależności.
Opcje obejmują
- sinopia
- npm_lazy
- npm-lazy-mirror
- artifactory
- npm Enterprise, od firmy npm
Kolejnym powodem, dla którego należy przekazywać zależności jest możliwość szybkiej edycji kodu, jeśli znajdziesz błąd lub jeśli chcesz dodać coś do biblioteki.
Jest to miecz obosieczny: jeśli to zrobisz, stracisz możliwość aktualizacji pakietu, jeśli powstaną nowe wydania, a to jest dobre tylko do szybkich, tymczasowych poprawek.
Optymalnym rozwiązaniem jest albo przesłanie PR, który robi to, co chcesz, do oryginalnego projektu, albo rozwidlenie go i użycie twojego rozwidlenia jako zależności.
Pobierz mój darmowy podręcznik Node.js
Kampus 2021 JavaScript Full-Stack JEST TERAZ OTWARTY DLA ZAPISÓW DO NIEDZIELI WTORKU! Nie przegap tej okazji, zapisz się już DZISIAJ!
Więcej tutoriali Node:
- Jak używać obietnic i await z funkcjami opartymi na wywołaniach zwrotnych Node.js
- Moduły Node Core
- Parsing JSON with Node.js
- Praca z deskryptorami plików w Node
- Strumienie Node.js
- Jak uzyskać ostatnio zaktualizowaną datę pliku za pomocą Node.js
- Przewodnik Pug
- Uzyskaj bieżący folder w Node
- Jak używać Node.js REPL
.