Kiedy używać Yarn over NPM? Jakie są różnice?

105

Jakie są różnice między Yarn i NPM? W chwili pisania tego pytanie mogę tylko znaleźć kilka artykułów w Internecie, pokazując to, co jest equvalent Przędza z polecenia NPM jak ten .

Czy mają te same funkcje (wiem, że Yarn obsługuje lokalne buforowanie i wygląda na to, że wystarczy pobrać pakiet tylko raz), ale poza tym są jakieś korzyści z przejścia z NPM do Yarn?

Asha
źródło
12
To nie jest złe pytanie i nie zasługuje na negatywną opinię. To powiedziawszy, trzeba to nieco rozwinąć, aby było to naprawdę dobre pytanie.
jedd.ahyoung
Szybkie Google pojawia się ten . Uważam, że jest to prawdopodobnie zbyt szerokie / mało konstruktywne dla StackOverflow i mogłoby to zrobić, gdyby pokazano nieco więcej badań.
Aurora0001
1
@ Aurora0001 kiedy szukałem, zobaczyłem ściągawkę, ale to nie jest odpowiedź na moje pytanie! Chcę poznać różnice między nimi, a nie różnice między poleceniami. Najpierw przeczytaj moje pytanie
Asha
4
@Asha Powinieneś edytować swoje pytanie, aby mieć więcej szczegółów i pokazać, co już zbadałeś. Jakich różnic szukasz? Czy próbujesz dowiedzieć się, w jaki sposób biblioteki są wdrażane? Czy próbujesz dowiedzieć się, czym różnią się podejściem do problemu? Jeśli sprecyzujesz swoje pytanie, może być dobre, w zależności od tego, o co pytasz. (W zależności od tego, o co pytasz, informacje mogą być już dostępne w Google.)
jedd.ahyoung
3
zabawni ludzie mówią ci, żebyś to wygooglował; Przekonałem się, że twoje pytanie trafia do Google ... ludzie w przepełnieniu stosu zbytnio wykluczają pewne rzeczy, tak jakby to uczynił je ważniejszymi, jak sądzę.
jairhumberto

Odpowiedzi:

72

AKTUALIZACJA: marzec 2018 (trochę późno ...)

Od wersji 5 npm

  • generuje `` plik blokujący '' o nazwie, package-lock.jsonktóry naprawia całe drzewo zależności w taki sam sposób, jak robi to przędza (lub jakikolwiek inny) mechanizm blokujący,
  • Narzędzie zostało wykonane
  • --save jest teraz domniemane dla npm i
  • Lepsze wykorzystanie sieci i pamięci podręcznej

npm 5.7.0 dodatkowo wprowadzone do npm cipolecenia szybciej zainstalować zależności w środowisku ciągłej integracji poprzez instalowanie pakietów tylko znaleźć w package-lock.json(zgłoszenie błędu, jeśli package-lock.jsoni package.jsonnie są zsynchronizowane).

Osobiście nadal używam npm.


Oryginał

Nie lubię cytować bezpośrednio od doktorów, ale wykonują świetną robotę wyjaśniając dlaczego, na tyle zwięźle, że nie widzę, jak dalej podsumować pomysły.

W dużej mierze:

  1. Zawsze wiesz, że otrzymujesz to samo na każdym komputerze deweloperskim

  2. Paralelizuje operacje, które npmnie, i

  3. Zapewnia bardziej efektywne wykorzystanie sieci.

  4. Może również efektywniej wykorzystywać inne zasoby systemowe (takie jak pamięć RAM) .

Jakie są doświadczenia ludzi z produkcją? Kto wie, dla ogółu społeczeństwa to niemowlę.

TL; DR firmy Yehuda Katz :

Od samego początku plik blokujący Yarn gwarantuje, że wielokrotne uruchamianie przędzy w tym samym repozytorium skutkuje tymi samymi pakietami.

Po drugie, Yarn stara się uzyskać dobrą wydajność z zimną pamięcią podręczną, ale szczególnie z ciepłą pamięcią podręczną.

Wreszcie Yarn sprawia, że ​​bezpieczeństwo jest wartością podstawową.

Niezły post na blogu

NPM vs Yarn Cheat Sheet ” autorstwa Ganta Laborde

Nieco dłuższa wersja z projektu :

Szybko: Yarn buforuje każdy pobierany pakiet, więc nigdy więcej nie musi. Równolegle wykonuje również operacje, aby zmaksymalizować wykorzystanie zasobów, dzięki czemu czas instalacji jest krótszy niż kiedykolwiek.

Niezawodny: Korzystając ze szczegółowego, ale zwięzłego formatu pliku blokującego i deterministycznego algorytmu instalacji, Yarn jest w stanie zagwarantować, że instalacja, która działała w jednym systemie, będzie działać dokładnie tak samo w każdym innym systemie.

Bezpieczeństwo: Yarn używa sum kontrolnych do weryfikacji integralności każdego zainstalowanego pakietu przed wykonaniem jego kodu.

I z README.md :

  • Tryb offline: jeśli wcześniej zainstalowałeś pakiet, możesz zainstalować go ponownie bez połączenia z Internetem.
  • Deterministyczne: te same zależności zostaną zainstalowane dokładnie w ten sam sposób na każdej maszynie, niezależnie od kolejności instalacji.
  • Wydajność sieci: Yarn wydajnie kolejkuje żądania i unika wodospadów żądań, aby zmaksymalizować wykorzystanie sieci.
  • Wiele rejestrów: zainstaluj dowolny pakiet z npm lub Bower i zachowaj ten sam przepływ pracy z pakietami.
  • Odporność sieci: pojedyncze niepowodzenie żądania nie spowoduje niepowodzenia instalacji. Żądania są ponawiane w przypadku niepowodzenia.
  • Tryb płaski: rozwiąż niezgodne wersje zależności z jedną wersją, aby uniknąć tworzenia duplikatów.
  • Więcej emotikonów. 🐈
msanford
źródło
Czy możesz mi powiedzieć, czy przędza ma rozdzielczość zależności, tak jak robi to npm v3 ? Rozumiem, że istnieje --flatopcja, która wymusza prawdziwą płaską strukturę, w której można zainstalować tylko jedną wersję każdej zależności, ale jakie jest domyślne zachowanie w tym przypadku? Dzięki.
Dimitris Karagiannis
2
Więcej emoji: kot:
Huei Tan
7
Doskonała odpowiedź. Zastanawiam się, czy próbowali przyczynić się do npm przed rozwidleniem i zmianą nazwy oraz zmianą składni install -g.
Gardner Bickford
bardzo dobry post scotch.io/tutorials/…
Akshay Vijay Jain
3

Co to jest PNPM?

pnpmużywa twardych linków i dowiązań symbolicznych do zapisania jednej wersji modułu tylko raz na dysku. Korzystając na przykład z npm lub Yarn, jeśli masz 100 projektów używających tej samej wersji lodash, będziesz mieć 100 kopii lodash na dysku. Dzięki pnpm lodash zostanie zapisany w jednym miejscu na dysku, a twardy link umieści go w node_modules, w którym powinien zostać zainstalowany.

W rezultacie oszczędzasz gigabajty miejsca na dysku i masz dużo szybsze instalacje! Jeśli chcesz uzyskać więcej informacji na temat unikalnej struktury node_modules, którą tworzy pnpm i dlaczego działa dobrze z ekosystemem Node.js, przeczytaj ten mały artykuł: Dlaczego powinniśmy używać pnpm?

Jak zainstalować PNPM?

npm install -g pnpm

Jak zainstalować pakiet npm przy użyciu PNPM?

pnpm install -g typescript // or your desired package

Korzyści z PNPMponad YarniNPM

Tutaj jest pasek postępu pokazujący czas instalacji NPM, YARNi PNPM(krótszy pasek jest lepszy) wprowadź opis obrazu tutaj

Kliknij, aby zakończyć test porównawczy

aby uzyskać więcej informacji, odwiedź https://www.npmjs.com/package/pnpm

WasiF
źródło
2

npm :

  1. Menedżer pakietów dla JavaScript. npm to interfejs wiersza poleceń do ekosystemu npm. Jest przetestowany w boju, zaskakująco elastyczny i codziennie używany przez setki tysięcy programistów JavaScript.
  2. NPM generuje poprawny plik blokady, podczas gdy plik blokady Yarn może być w niektórych przypadkach uszkodzony i musi zostać naprawiony za pomocą narzędzi przędzy

Przędza :

  1. Nowy menedżer pakietów dla JavaScript. Przędza zapisuje w pamięci podręcznej każdy pobierany pakiet, więc nigdy więcej nie musi tego robić. Równolegle wykonuje również operacje, aby zmaksymalizować wykorzystanie zasobów, dzięki czemu czas instalacji jest krótszy niż kiedykolwiek.
  2. Yarn nie obsługuje logowania za pomocą hasła (podczas gdy NPM tak)
Yogesh Waghmare
źródło
1
jakiego rodzaju loginy?
Rich Stone
1

Gdy instalujesz pakiet przy użyciu Yarn (używając nazwy pakietu dodawania przędzy), umieszcza on pakiet na dysku . Podczas następnej instalacji ten pakiet zostanie użyty zamiast wysyłania żądania HTTP w celu pobrania tarballa z rejestru.

Yarn jest dostarczany z poręcznym narzędziem do sprawdzania licencji , które może stać się naprawdę potężne, jeśli będziesz musiał sprawdzić licencje wszystkich modułów, na których polegasz.

Jeśli pracujesz na zastrzeżonym oprogramowaniu, nie ma znaczenia, którego używasz. Z npm możesz użyć npm-shrinkwrap.js, podczas gdy możesz użyć yarn.lock z Yarn.

Aby uzyskać więcej informacji, przeczytaj poniższy blog

https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/

ganesh kalje
źródło
1

Próbuję dać lepszy przegląd początkującym.

npm był historycznie (2010) najpopularniejszym menedżerem pakietów dla JavaScript. Jeśli chcesz go użyć do zarządzania zależnościami projektu, możesz wpisać następujące polecenie:

npm init

Spowoduje to wygenerowanie package.jsonpliku. Zawiera wszystkie zależności projektu.

Następnie

npm install

utworzy katalog node_modulesi pobierze zależności (które dodałeś do package.jsonpliku) w nim.

Utworzy również package-lock.jsonplik. Ten plik jest używany do opisania wygenerowanego drzewa zależności. Pozwala programistom zainstalować dokładnie te same zależności. Na przykład, możesz sobie wyobrazić programistę aktualizującego zależność do v2, a następnie v3, podczas gdy inny bezpośrednio aktualizuje do v3.

npm instaluje zależności w sposób niedeterministyczny, co oznacza, że ​​dwóch programistów może mieć inny node_moduleskatalog, co powoduje różne zachowania . ** npm ucierpiał z powodu złej reputacji, jak na przykład w lutym 2018 r .: wykryto problem w wersji 5.7.0, w którym uruchomienie sudo npm w systemach Linux zmienia właściciela plików systemowych, trwale uszkadzając system operacyjny.

Aby rozwiązać te problemy i innych, Facebook wprowadził nową menedżera pakietów (2016): Nitki szybciej, bezpieczniej i bardziej niezawodnie Package Manager dla JavaScriptu.

Możesz dodać włóczkę do projektu wpisując:

yarn init

Spowoduje to utworzenie package.jsonpliku. Następnie zainstaluj zależności za pomocą:

yarn install

Zostanie node_moduleswygenerowany folder . Yarn wygeneruje również plik o nazwie yarn.lock. Ten plik służy temu samemu celowi, co plik, package-lock.jsonale zamiast tego jest konstruowany przy użyciu deterministycznego i niezawodnego algorytmu, co prowadzi do spójnych kompilacji.

Jeśli rozpocząłeś projekt z npm , możesz łatwo migrować do Yarn . przędza zużyje to samo package.json. Aby uzyskać więcej informacji, zobacz Migracja z npm .

Jednak npm został poprawiony ze sobą nowości i niektóre projekty nadal używa KMP nad przędzy .

Mathieu Gemard
źródło
1

Odpowiedź @msanford obejmuje prawie wszystko, jednak brakuje mi części dotyczącej bezpieczeństwa (znanych luk OWASP).

Przędza

Możesz je sprawdzić za pomocą yarn audit, jednak nie możesz ich naprawić. Jest to nadal otwarty problem w GitHub ( https://github.com/yarnpkg/yarn/issues/7075 ).

npm

Możesz użyć npm audit fix, więc niektóre z nich możesz naprawić samodzielnie.

Obaj, tj. npm auditI yarn auditmają własne narzędzia do ciągłej integracji. Są to odpowiednio https://github.com/IBM/audit-ci (używane, działa świetnie!) I https://yarnpkg.com/package/audit-ci (nie używane).

Daniel Danielecki
źródło