9.11.2022 |

Yarn pnp

Yarn ist ein node package manager wie npm aber mit einigen innovativen konzepten. Wer schonmal yarn benutzt hat, hat vermutlich die "classic" version, yarn 1 benutzt. Ich habe in meinen privaten Projekten zumindest immer Version 1 benutzt.

Nach einer Diskussion mit einem Kollegen, ob wir denn Yarn oder Npm benutzen sollten, habe ich mich mal mit dem Thema auseinandergesetzt und mir die neuen Yarn versionen angeschaut.

Keine node_modules mehr

Mit Yarn PnP (Plug'n'Play) werden die npm dependencies nicht mehr entpackt in den node_modules Ordner sondern werden als zip in den .yarn/cache ordner gespeichert. Da die packages gezipped sind, kann dieser Ordner dann auch ins git eingechecked werden, wodurch das herunterladen und installieren der packages im ci system oder beim auschecken eines branches erspart wird. (Den node_modules Ordner sollte man nie einchecken, da die ganzen einzelnen Dateien in den node_modules git überfordern würde). Außerdem verringert sich der benötigte Speicherplatz im vergleich zu node_modules um ein Vielfaches.

Für packages die Schreibzugriff auf ihren node_modules Ordner brauchen, können mittels yarn unplug <package> "unplugged" werden, und werden dann beim yarn install aus dem cache extrahiert in einen .yarn/unplugged Ordner.

Für das auflösen der packages wird eine .pnp.cjs Datei generiert, welche das lesen der modules aus den zip files erledigt. Diese wird beim starten von node geladen und sorgt dafür, dass node trotzdem die ganzen module importieren kann.

Nachteile

  • Die Unterstützung von yarn pnp in nx ist nicht gut
  • Manche packages müssen mit yarn node ./script.js oder yarn pnpify tsc aufgerufen werden damit die packages gefunden werden
Lucas
Zur Übersicht

Mehr vom DevSquad...

Lucas Meurer

NextJS 13 and React Server Components

Jörg Herbst

Integrate GitLab und Postman für API-first