Was bedeutet das Präfix "at" (@) in npm-Paketen?

294

In der Angular Component Router-Dokumentation bin ich gerade auf einen npm-Befehl gestoßen, den ich noch nie gesehen habe, und ich verstehe nicht, was los ist:

npm install @angular/router --save

Was bedeutet das @angular/router?

Ist die gesamte Zeichenfolge ein Paketname? Aber dann finde ich dieses Paket nicht, wenn ich die Suche auf npmjs.com verwende . Und auch die Befehlszeilensuche gibt kein solches Paket zurück:

npm search @angular/router
:No match found for "@angular/router"

Ist das also @angular/eine Art Präfixmechanismus in npm? Und wie funktioniert es?

jbandi
quelle
7
npm help scope
Trailing Slash
3
@trailingslash Das ist eine großartige Antwort! (sollte kein Kommentar sein.)
Begrenzte Versöhnung

Antworten:

324

Dies ist eine neue Funktion von NPM, die als "Gültigkeitsbereichspakete" bezeichnet wird und die effektive Zuordnung von NPM-Paketen ermöglicht. Jeder Benutzer und jede Organisation auf NPM hat ihren eigenen Bereich und sie sind die einzigen Personen, die Pakete hinzufügen können.

Dies ist aus mehreren Gründen nützlich:

  • Auf diese Weise können Organisationen klarstellen, welche Pakete "offiziell" sind und welche nicht.
    • Wenn ein Paket beispielsweise den Umfang hat @angular, wissen Sie, dass es vom Angular-Kernteam veröffentlicht wurde.
  • Der Paketname muss nur für den Bereich eindeutig sein, in dem er veröffentlicht wird, nicht für die gesamte Registrierung.
    • Beispielsweise ist der Paketname httpbereits im Haupt-Repository enthalten, Angular kann dies jedoch @angular/httpauch.

Der Grund dafür, dass Pakete mit Gültigkeitsbereich nicht in der öffentlichen Suche angezeigt werden, liegt darin, dass viele von ihnen private Pakete sind, die von Organisationen erstellt wurden, die die kostenpflichtigen Dienste von NPM nutzen, und dass sie die Suche erst dann öffnen können, wenn sie absolut sicher sind, dass dies nicht der Fall ist alles öffentlich zu machen, was nicht öffentlich sein sollte - aus rechtlicher Sicht ist dies ziemlich verständlich.

Weitere Informationen finden Sie in den NPM-Dokumenten und den Angular-Dokumenten .

BEARBEITEN: Es scheint, dass Pakete mit öffentlichem Gültigkeitsbereich jetzt ordnungsgemäß bei der Suche angezeigt werden!

Joe Clay
quelle
68

Grundsätzlich gibt es bei npm zwei Arten von Modulen:

  • Globale Module - Dies sind Module, die der heute geltenden Namenskonvention folgen. Sie require('foo')und es gibt viel Freude. Sie gehören einer oder mehreren Personen über das npm install XYZKommando.

  • Bereichsmodule - Dies sind neue Module, die unter einem Organisationsnamen "Gültigkeitsbereich" haben, der mit @dem Namen der Organisation, einem Schrägstrich und schließlich dem Paketnamen beginnt , z @someOrgScope/packagename. Bereiche sind eine Möglichkeit, verwandte Pakete zu gruppieren, und wirken sich auch auf einige Dinge aus, wie npm das Paket behandelt.

Ein Paket mit Gültigkeitsbereich wird installiert, indem in der npm-Installation auf den Namen verwiesen wird, dem ein @ -Symbol vorangestellt ist:

npm install @myorg/mypackage

siehe auch

Pardeep Jain
quelle