npm vs Yarn vs pnpm: Welcher Paketmanager?
Führen Sie in einem Projekt npm install aus und danach für dieselbe package.json pnpm install. Sie erhalten zwei unterschiedliche node_modules-Bäume und zwei unterschiedliche Lockfiles. Kommt ein Kollege dazu, der Yarn nutzt, landet das Repository mit drei Lockfiles in seiner Historie, jeder mit einem leicht anderen Abhängigkeitsbaum. Alle drei lesen dieselbe package.json und laden aus derselben npm-Registry. Uneinig sind sie sich darüber, was auf die Festplatte geschrieben wird. Wie npm, Yarn und pnpm node_modules aufbauen Die Struktur von npm ist flach. Jedes Paket, das Ihre Abhängigkeiten brauchen, egal wie tief im Baum, wird in die oberste node_modules gehoben, solange kein Versionskonflikt besteht. Das ist seit npm 3 das Standardverhalten. Der Nebeneffekt: Ihr Code kann ein Paket per require() oder import laden, das Sie nie in package.json eingetragen haben, solange etwas anderes im Baum davon abhängt. Das funktioniert, bis dieses andere Paket die Abhängigkeit in einem Minor-Release fallenlässt und Ihr Build bricht, ohne dass Sie Ihren eigenen Code geändert hätten. Das ist eine Phantom-Abhängigkeit, und die Struktur von npm tut nichts, um sie zu verhindern. ...