Pnpm vs Yarn vs npm

pnpm

pnpm is an alternative package manager for Node.js. It is a drop-in replacement for npm, but faster and more efficient.

How fast? 3 times faster! See benchmarks here.

via https://www.kochan.io/nodejs/why-should-we-use-pnpm.html (link furat de pe grupul Frontend Bucharest)

yarn

ultra fast and mega secure …

Can someone please explain for my friend, what should he use and why?

yarn e mai rapid față de npm, dar am dat de probleme cu node-gyp și lucruri care trebuie compilate sau rulate, e util că face un lockfile, generează package.json mai aiurea. (multe librării deja folosesc yarn standard chiar dacă folosești npm)

Pnpm încă nu l-am folosit, teoretic e cel mai bun proiect. În principal fiindcă poate evita fișierele duplicat.


http://www.kochan.io/nodejs/why-should-we-use-pnpm.html

3 Likes

Personally I would bet on yarn. Sponsored by Facebook, used in production by them, works across different mediums like ReasonML.

1 Like

Am un feeling ca yarn este facebook-oriented.
Din punctul meu de vedere Facebook este egocentrist, in sensul ca odată ce ai inceput sa folosesti uneltele lor, vei rămâne dependent de sistemul lor.
O metodă asemănătoare Microsoft.

2 Likes

Nu voi intra iar in discutia cu FB. si monopolul care incerca (si reusesc) sa-l creeze.

Aparent Yarn de ceva timp se instaleaza direct fara ajutorul npm-ului - plus va avea suport oficial in Rails 5.1 (ceea ce mi se pare o alegere aiurea in a lega RoR de volatilitatea [0] ecosistemului JS).

Insa dupa tot acest timp tot apar variante mai ok de npm install (in cazul de fata, argumentabil, cel putin de autor - chiar mai bun ca Yarn)

Tot nu inteleg aceasta schisma: npm and co. vs Yarn and co.

Daca Yarn este vazut ca default de comunitate de ce inca continua aceasta fragmentare in loc sa aduca imbunatatiri default-ului?

  • pnpm are 1173 de commit-uri
  • yarn are 1386
  • bundler are 8429
  • npm are 7359

Evident un commit nu este echivalent cu un alt commit - totusi pare un efort similar in doua directii diferite.


[0] - Phoenix IMO au rezolvat problema chiar elegant - desi pornesc cu Brunch in final nu prea le pasa ce folosesti adaugand in framework tot ce ai nevoie pt. a folosi ce vrei pe partea de front-end.

1 Like

Ca orice venture backed company care nu aduce indeajuns profit, npm nu are resurse sa aloce pt. dezvoltarea npm-ului ca installer. Deaceea si ~3000 open issues pe github.

Prima alternativa reala a fost pnpm, care a fost un “one man show” project. Eu l-am folosit de la inceput, dar avea foarte multe probleme si am renuntat sa-l mai folosesc in productie, il foloseam doar local.

Yarn, ca manager, nu are lockin cu nimic din Facebook momentan. Inca de la inceput pt. mine “it just works” si n-am intampinat vreo problema.

Nu sunt fan Facebook, dar yarn este prima solutie care, cel putin pt. mine, mi-a rezolvat multe probleme de “push JS to production and sleep well”.

Folosind npm am intampinat de multe ori situatia:

  • git push origin production
  • git hooks starts script to update production
  • npm install
  • npm ERR! Error: 404 Not Found
  • ssh to server and fix shit manually

Cu yarn n-am avut problema asta. Daca va ganditi ca e cam exagerata treaba cu 404, uitati-va la numarul de related issues.

4 Likes

Ce am mai învățat :
pnpm trebuie să regenereze de la zero node_modules dacă a fost generat de yarn sau npm, yarn poate lucra împreună cu npm pe același node_modules. Un node_modules generat cu pnpm nu poate fi folosit cu npm/yarn.

1 Like

E o problema așa mare asta totuși?

I think so i.e. that basically translates to: my packet manager doesn’t want to play nice with the others, I’m the One!

EDIT:

desi avand in vedere ca foloseste symlinks galore oarecum nu ma mir - totusi @isti37 a venit cu un punct interesant - daca fragmentarea se pastreaza ar fi OK ca macar structura sa fie compatibila intre ele. e.g. daca exista un bug in Yarn si nu in pnpm trecerea sa se faca relativ usor prin a muta/edita cateva fisiere de configurare.

Exact acceeasi experienta placuta o am si eu, folosind yarn de cateva luni in mod constant. Niciun necaz, niciun crash.

Toate se bazează pe package.json și cred că asta e un punct bun unde sa pretinzi standardizare. Faptul că sunt node_modules incompatibile intre ele nu cred că trebuie pus că un minus. Lasa managerul să optimizeze partea de structura locală și să experimenteze cu diverse variante chiar. E un director “de lucru” până la urmă, nu-l pui in source control, e relativ ușor de regenerat, e o practica buna să îl regenerezi in procesul de build pentru diverse environment-uri etc.

1 Like

yarn useful stuff:

yarn add file:/path/to/local/folder – installs a package that is on your local file system. This is useful to test out other packages of yours that haven’t been published to the registry.

1 Like

off-topic:

emojis in the command-line are like RGB LEDs on every darn gaming hardware out there: pretty … useless.

Nu auzisem de pnpm dar după ce-am citit ideea din spate mi s-a părut genial. Doar că:

:confused:

1 Like

I thought i’d give it a try but I ran into a problem:
the error is: 'cross-device link not permitted’
it looks like its building a registry at ‘~/.pnpm-store/1/registry.npmjs.org/’ then then its trying to link it to ‘~/red/Projects/…’.

im guessing the problem is that ‘~/red’ is a external harddrive mounted to that location… is there a way to maybe configure pnpm to store the ‘.pnpm-store’ at a different path?

autorul se pare ca a raspuns la acest bug?

You can use npm configs. Specify the desired path using the store-path config key. Something like npm config set store-path c:\foo\store

via https://www.kochan.io/nodejs/why-should-we-use-pnpm.html#comment-3262893081

iar npm pare a fi un bug rezolvat de ceva timp