2017-07-04 38 views
20

Przypadkowo uruchomiłem npm install w projekcie, który używa Przędzy i zauważyłem, że npm utworzył plik package-lock.json.Jaka jest różnica między pakietem yarn.lock a pakietem npm?

Wiem, że przędza zyskała na popularności po części dlatego, że użyła pliku blokującego do stworzenia bardziej niezawodnych i deterministycznych instalacji uzależnień niż npm, który przez jakiś czas miał tylko okaleczoną shrinkwrap feature, ale teraz nie jestem pewien co zrobić z ten plik npmfoldfile i czy jest coś fascynującego w dalszym używaniu Yarn.

Tak więc w duchu previous Q and A on StackOverflow on yarn vs shrinkwrap, pytam, co następuje:

  • Czy są jakieś istotne różnice między tymi dwoma menedżerów pakietów pod względem niezawodności więcej?
  • Jeśli nie, czy jest jakiś ważny powód, aby nadal używać Przędzy poza "Więcej emoji."?
+2

https://yarnpkg.com/blog/2017/05/31/determinism/ może pomóc. Wygląda na to, że npm 5 prawie osiągnął parzystość z przędzy pod tym względem. –

Odpowiedz

10

Na papierze przędza i NPM 5 wyglądają niemal równorzędnie. Oba mają deterministyczne pliki blokujące i prawie dopasowały się do siebie w funkcjonalności. Niektórzy twierdzą, że przędza była katalizatorem, dzięki któremu NPM może wprowadzać innowacje.

Jednakże, po doświadczeniu NPM 5 przez miesiąc, mój zespół zdecydował się na przejście do przędzy.

Technicznie NPM ma "bardziej deterministyczny" plik blokady, ponieważ istnieje teoretyczna gwarancja, że ​​w wersjach NPM, NPM będzie produkować dokładnie ten sam folder node_modules. Z drugiej strony, dokładne podciąganie/porządkowanie przędz zależy od wersji przędzy i może zmieniać się w wersjach przędzy. Zasadniczo ma to niewielki wpływ.

Dlaczego warto używać przędzy? Łączenie niezawodności &.

Przędza dokonała lekkiego wyboru determinizmu, aby uzyskać znacznie prostszy plik, który łatwiej się scalić. Jeśli jesteś solowym programistą, prawdopodobnie nie wpłynie to na ciebie, ale jeśli pracujesz w zespole z wieloma współpracownikami dopuszczającymi zmiany zależności, szybko staje się to ogromnym problemem. NPM's package-lock jest praktycznie nie do zniesienia i kończy się konieczność ponownego generowania lub walki. Z drugiej strony, w przypadku przędzy połączenia są łatwe i przewidywalne.

Patrz: https://yarnpkg.com/blog/2017/05/31/determinism/

Na marginesie, znaleźliśmy również przędzy być bardziej wiarygodne średnio.

+0

Jeśli chodzi o łączenie, nie wiem, czy zgodziłbym się na "łatwość" robienia tego z yarn.lock. Kilka tygodni temu natknąłem się na ten problem i znalazłem tę rozmowę, która zasadniczo mówi, że powinieneś ją zregenerować, ale zrób to w określony sposób. https://github.com/yarnpkg/yarn/issues/1776#issuecomment-269539948 – jktravis