Heim  >  Artikel  >  Web-Frontend  >  NPM peerDependencies im Detail: Eine umfassende Einführung

NPM peerDependencies im Detail: Eine umfassende Einführung

Susan Sarandon
Susan SarandonOriginal
2024-10-19 16:34:01428Durchsuche

NPM peerDependencies in Depth: A Comprehensive Introduction

Als Javascript-Entwickler kennen wir alle zwei verschiedene Abhängigkeiten in unseren Projekten, Abhängigkeiten und DevDependencies, aber was ist mit PeerDependencies?

In dieser Serie werden wir diese weniger häufige Abhängigkeit in Javascript untersuchen. Wir werden untersuchen, was das ist, was ich als Bibliotheksbenutzer wissen muss und welche Best Practices für Bibliotheksautoren gelten.

Was sind Abhängigkeiten in NPM?

Lassen Sie uns die verschiedenen gängigen Typen noch einmal zusammenfassen:

  • Abhängigkeiten: Dies sind die in Ihrer Anwendung verwendeten Tools; Ein gutes Beispiel ist React, Angular und Express. Wenn sich Ihre Anwendung in der Produktion befindet, wird der Code der Abhängigkeitsbibliotheken unter der Haube ausgeführt und versorgt Ihre Anwendung mit Strom.

  • devDependencies: Sie werden diese Dienstprogramme verwenden, um Ihre Anwendung zu erstellen. Hier finden Sie Bibliotheken zum Kompilieren oder Parsen Ihres Codes und Bibliotheken zum Ausführen Ihres Tests.

Was sind Peer-Abhängigkeiten?

Autoren geben bestimmte Bibliotheken als peerDependency an, wenn sie verlangen, dass diese im Arbeitsbereich/Projekt installiert werden, damit alles wie erwartet funktioniert. Sie teilen NPM (und den Entwicklern, die die Bibliothek installieren) mit, dass das Paket die spezifische Version (oder den Versionsbereich) eines anderen Pakets benötigt, um ordnungsgemäß zu funktionieren. Dennoch ist der Benutzer für die Installation und Verwaltung dieser Abhängigkeit verantwortlich.

Stellen wir uns ein Beispiel vor: Sie erstellen ein Dienstprogramm für Ihr bevorzugtes Framework, das in der Umgebung installiert werden soll, in der Ihre Bibliothek ausgeführt wird. Die Möglichkeit, dieses Szenario genau zu spezifizieren, ist die Verwendung der NPM-PeerDependency-Funktion. Es bietet eine klare Richtlinie für die nahtlose Integration Ihrer Bibliothek.

Diese Praxis kommt besonders häufig bei Bibliotheken vor, die als „Plugins“ fungieren, da sie für eine ordnungsgemäße Funktionalität die Anforderungen an den Arbeitsbereich angeben müssen.

Echtes Beispiel für PeerDependency

Lassen Sie uns eine beliebte React-Bibliothek analysieren, React-Datepicker. Wenn wir uns ansehen, wie die package.json heute aussieht, können wir erkennen, dass wir mindestens die React-Version ^16.9.0 benötigen, damit die React-Date-Auswahl korrekt funktioniert.

"peerDependencies": {
  "react": "^16.9.0 || ^17 || ^18",
  "react-dom": "^16.9.0 || ^17 || ^18"
},

Wenn wir dieser Anforderung nicht nachkommen, kommt es zu unerwartetem Verhalten.

Die PeerDependencies-Adresse der Herausforderungen

Versionskonflikte treten auf, wenn Pakete in einem Projekt auf verschiedenen Versionen derselben Bibliothek basieren. Dies kann zu Fehlern führen, insbesondere bei Bibliotheken wie React, bei denen die gemeinsame Nutzung derselben Instanz für die Zustandsverwaltung und Komponentenkommunikation von entscheidender Bedeutung ist. Ohne peerDependencies könnten mehrere Bibliotheksversionen installiert werden, was zu unerwartetem Verhalten führen würde.

Um diese Probleme zu verhindern, ermöglichen peerDependencies Paketautoren, anzugeben, welche Version einer Abhängigkeit ihr Paket benötigt, ohne sie direkt zu installieren. Dadurch verlagert sich die Verantwortung auf den Entwickler, der das Paket verwendet, und stellt sicher, dass er eine einzige, kompatible Abhängigkeitsversion installiert. Beispielsweise verwenden Bibliotheken wie React-Datepicker und React-Router peerDependencies, um sicherzustellen, dass sie nahtlos mit derselben Version von React im Projekt zusammenarbeiten.

Ein weiteres Beispiel

Stellen Sie sich dieses Szenario vor: Sie erstellen eine Bibliothek, um einen ausgefallenen Operator für rxjs zu teilen. Wenn Sie rxjs als Abhängigkeit statt als peerDependency festlegen, installiert Ihre Bibliothek ihre eigene Version von rxjs. Das scheint zunächst keine große Sache zu sein, kann aber in Wirklichkeit zu Versionskonflikten führen.

Wenn das Projekt, das Ihre Bibliothek installiert, bereits eine andere Version von rxjs verwendet, kann dies zu erheblichen Problemen führen. Die Anwendung verfügt möglicherweise über zwei Instanzen von rxjs (eine aus Ihrer Bibliothek und eine aus dem Projekt selbst). Da rxjs stark auf gemeinsam genutzte Observables und Abonnements angewiesen ist, kann die gleichzeitige Ausführung zweier Versionen zu unvorhersehbarem Verhalten führen, z. B. dazu, dass Streams nicht ordnungsgemäß synchronisiert werden oder Ereignisse fehlen.

Durch die Verwendung von peerDependencies können Sie dieses Problem vermeiden. Ihr Paket signalisiert dem Projekt, dass es die Anwesenheit einer bestimmten Version (oder eines Bereichs) von rxjs erwartet, installiert jedoch keine eigene Version. Auf diese Weise verwendet das Projekt eine einzige Version von rxjs, die von Ihrer Bibliothek und anderen Teilen der Codebasis gemeinsam genutzt wird, um sicherzustellen, dass alles reibungslos und harmonisch läuft.

Abschluss

PeerDependencies werden möglicherweise nicht so häufig diskutiert wie Abhängigkeiten oder DevDependencies, aber sie spielen eine entscheidende Rolle bei der Gewährleistung der Kompatibilität und der Vermeidung von Versionskonflikten in komplexen Projekten. Indem peerDependencies klar definiert, welche Version einer gemeinsam genutzten Abhängigkeit eine Bibliothek benötigt, ohne sie direkt zu installieren, ermöglichen sie Entwicklern, die Kontrolle über ihre Projektumgebung zu behalten.

Das Ziel dieses ersten Beitrags ist es, eine gute Grundlage für das Verständnis von Peer-Abhängigkeiten zu schaffen. Im nächsten Kapitel dieser Reihe werden wir auf praktischere Weise die verschiedenen Aspekte von PeerDependencies als Benutzer von Bibliotheken mit PeerDependencies untersuchen, wie man häufige Probleme überwindet und wie sie sich in verschiedenen Javascript-Paketmanagern verhalten.

Das obige ist der detaillierte Inhalt vonNPM peerDependencies im Detail: Eine umfassende Einführung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn