Używamy przędzy dla wszystkich naszych deterministycznych instalacji pkg, ale nie uniemożliwiamy użytkownikowi korzystania z npm - zgaduję, że posiadanie obu tych plików spowoduje jednak problemy. Czy należy go dodać do Twojego katalogu .gitignore?
Używamy przędzy dla wszystkich naszych deterministycznych instalacji pkg, ale nie uniemożliwiamy użytkownikowi korzystania z npm - zgaduję, że posiadanie obu tych plików spowoduje jednak problemy. Czy należy go dodać do Twojego katalogu .gitignore?
Odpowiedzi:
Jak objęte gdzie indziej, pliki lock zależność, które są obsługiwane przez wiele systemów zarządzania pakietami (np: kompozytor i Bundler ), powinna być zaangażowana w kodzie w wycofanych z łańcucha projektów - tak, że każdy próbuje uruchomić ten projekt robi więc z dokładnie przetestowanym zestawem zależności.
Mniej jasne jest, czy pliki blokujące powinny być zawsze zatwierdzane w pakietach, które mają być uwzględnione w innych projektach (gdzie pożądane są luźniejsze zależności). Jednak zarówno Yarn , jak i NPM (omówione przez @Cyrille) inteligentnie ignorują yarn.locki package-lock.jsonodpowiednio w razie potrzeby, dzięki czemu bezpieczne jest zawsze zatwierdzanie tych plików blokujących.
Dlatego zawszeyarn.lockpackage-lock.json powinieneś zatwierdzić przynajmniej jeden menedżer pakietów lub w zależności od tego, którego używasz.
Obecnie mamy dwa różne systemy zarządzania pakietami, które zarówno zainstalować ten sam zestaw zależności od package.json, ale które generują i odczytywanych z dwóch różnych plików blokujących. NPM 5 generuje package-lock.json, podczas gdy Yarn generuje yarn.lock.
Jeśli zatwierdzisz package-lock.json, budujesz wsparcie dla osób instalujących twoje zależności z NPM 5. Jeśli zatwierdzisz yarn.lock, budujesz wsparcie dla osób instalujących zależności z Yarn.
To, czy zdecydujesz się zatwierdzić, yarn.lockczy package-lock.jsonoba, zależy od tego, czy osoby rozwijające się w Twoim projekcie używają tylko Yarn lub NPM 5, czy też obu. Jeśli twój projekt jest open source, prawdopodobnie najbardziej przyjazną dla społeczności rzeczą byłoby zatwierdzenie obu i zautomatyzowany proces, aby zapewnić yarn.locki package-lock.jsonzawsze pozostać zsynchronizowany.
Aktualizacja: Nitki są teraz wprowadzane jest importpolecenie , które będzie generować yarn.lockplik z package-lock.jsonpliku. Może to być przydatne do utrzymywania synchronizacji dwóch plików. (Dzięki @ słabe)
Kwestia ta została szczegółowo omówiona w projekcie Yarn w:
Obie są teraz zamknięte.
yarn importzostał wprowadzony w 2018 r. yarnpkg.com/blog/2018/06/04/yarn-import-package-lock
Powinieneś zatwierdzić 1 plik blokady drzewa zależności, ale nie powinieneś zatwierdzać obu. Wymaga to również standaryzacji na przędzy lub npm (nie na obu), aby zbudować + opracować projekt za pomocą.
Jeśli zatwierdzisz oba yarn.lockpliki ORAZ package-lock.jsonpliki, istnieje wiele sposobów, w jakie te 2 pliki mogą zapewnić różne drzewa zależności (nawet jeśli algorytmy rozdzielczości drzew yarn i npm są identyczne), i nietrywialne jest zapewnienie, że zapewniają dokładnie takie same ta sama odpowiedź. Ponieważ jest to nietrywialne, jest mało prawdopodobne, że to samo drzewo zależności zostanie utrzymane w obu plikach i nie chcesz innego zachowania w zależności od tego, czy kompilacja została wykonana przy użyciu yarn, czy npm.
Jeśli i kiedy przędza przełączy się z używania yarn.lockna package-lock.json( problem tutaj ), wybór pliku blokady do zatwierdzenia stanie się łatwy i nie będziemy już musieli martwić się o przędzę i npm skutkujące różnymi kompilacjami. Opierając się na tym wpisie na blogu , jest to zmiana, której nie powinniśmy się wkrótce spodziewać (wpis na blogu opisuje również różnice między yarn.locki package-lock.json.
Myślałem o tym samym pytaniu. Oto moje myśli, mam nadzieję, że to pomoże:
Dokumentacja npm package-lock.json zawiera następujące informacje:
Package-lock.json jest generowany automatycznie dla wszystkich operacji, w których npm modyfikuje drzewo node_modules lub package.json. Opisuje dokładnie drzewo, które zostało wygenerowane, tak aby kolejne instalacje były w stanie wygenerować identyczne drzewa, niezależnie od pośrednich aktualizacji zależności.
Jest to świetne, ponieważ zapobiega efektowi „działa na moim komputerze”.
Bez tego pliku, jeśli ty npm install --save A, npm doda "A": "^1.2.3"do twojego package.json. Kiedy ktoś pracuje npm installnad projektem, możliwe jest, że wersja 1.2.4z Azostał zwolniony. Ponieważ jest to najnowsza dostępna wersja, która spełnia zakres semver określony w Twoim package.json, zainstaluje tę wersję. Ale co, jeśli w tej wersji pojawi się nowy błąd? Ta osoba będzie miała problem, którego nie możesz odtworzyć, ponieważ masz poprzednią wersję, bez żadnego błędu.
Naprawiając stan node_moduleskatalogu, package-lock.jsonplik zapobiega temu problemowi, ponieważ każdy będzie miał te same wersje wszystkich pakietów.
Ale co, jeśli piszesz i publikujesz moduł npm? Dokumentacja mówi, co następuje:
Jednym z kluczowych szczegółów dotyczących pakietu package-lock.json jest to, że nie można go opublikować i zostanie zignorowany, jeśli zostanie znaleziony w jakimkolwiek miejscu innym niż pakiet najwyższego poziomu.
Tak więc, nawet jeśli to zatwierdzisz, kiedy użytkownik zainstaluje twój moduł, nie otrzyma package-lock.jsonpliku, a jedynie package.jsonplik. Dlatego npm zainstaluje najnowszą wersję, która spełnia zakresy semver wszystkich zależności. Oznacza to, że zawsze chcesz przetestować swój moduł z tymi wersjami swoich zależności, a nie z tą, którą zainstalowałeś, kiedy zacząłeś pisać moduł. Więc w tym przypadku package-lock.jsonjest wyraźnie bezużyteczny. Co więcej, może to być denerwujące.
Oto moja praktyczna zasada: jeśli pracujesz nad aplikacją, zatwierdź plik (i) blokady. Jeśli utrzymujesz bibliotekę, dodaj ją do listy ignorowanych. Tak czy inaczej, powinieneś używać dokładnych zakresów semver w package.json. Yehuda Katz (w pamięci podręcznej ) napisał świetne wyjaśnienie, kiedy zatwierdzać Gemfile.lock(plik blokady Rubiego), a kiedy nie. Przeczytaj przynajmniej sekcję tl; dr.
.gitignorei zazwyczaj znajduje się w katalogu głównym projektu.
Masz rację! Zezwolenie na używanie obu npmi yarnspowoduje problemy. Spójrz na ten artykuł .
Obecnie planujemy dodać ostrzeżenia do użytkowników, którzy używają obu
yarninpmw tym samym repozytorium do instalowania pakietów.Zdecydowanie zalecamy usunięcie
package-lock.jsonpliku, jeśli zdecydujesz się użyć przędzy, aby uniknąć przyszłych nieporozumień i możliwych problemów ze spójnością.
Możesz nie chcieć npmi yarnjako menedżer pakietów.
Te pliki są zarządzane przez twoje narzędzia, więc - zakładając, że użycie przędzy skutecznie zaktualizuje package-lock.json- przypuszczam, że zatwierdzenie obu plików działa dobrze.
Myślę, że najważniejszy dla twojego użytkownika jest package-lock.json(na przykład nie używam włóczki), więc ten musi być zaangażowany.
Albowiem yarn.lock, to zależy, jeśli pracować samodzielnie lub w zespole. Jeśli solo, to chyba nie ma potrzeby tego robić. Jeśli (planujesz) pracować w zespole, to prawdopodobnie powinieneś to robić , przynajmniej do czasu, gdy przędza to wspiera
Przypuszczam, że zespół przędzy w końcu przestanie używać yarn.locki używać package-json.lockzamiast tego, w tym momencie stanie się prostszy 😛
Nie, jednoczesne używanie obu plików blokujących najczęściej powoduje niespójności w drzewie zależności, zwłaszcza podczas współpracy w zespole. Ignorowanie jednej lub drugiej blokady to proste rozwiązanie. Upewnij się tylko, że Twój zespół rozumie i zgadza się z tą zmianą.