Jakie jest znaczenie prefiksu „at” (@) w pakietach npm?

295

W dokumentacji Angular Component Router natknąłem się na polecenie npm, którego nigdy wcześniej nie widziałem i nie rozumiem, co się dzieje:

npm install @angular/router --save

Co to znaczy @angular/router?

Czy cały ciąg to nazwa pakietu? Ale potem nie mogę znaleźć tego pakietu, gdy korzystam z wyszukiwania na npmjs.com . A także wyszukiwanie wiersza poleceń nie zwraca takiego pakietu:

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

Czy jest więc @angular/jakiś mechanizm prefiksu w npm? Jak to działa?

jbandi
źródło
7
npm help scope
końcowy slash
3
@trailingslash To świetna odpowiedź! (nie powinien to być komentarz.)
Ograniczone Zadośćuczynienie

Odpowiedzi:

325

Jest to nowa funkcja NPM zwana „pakietami o zasięgu”, która skutecznie pozwala na umieszczanie pakietów nazw w NPM. Każdy użytkownik i organizacja w NPM ma swój własny zakres i są jedynymi osobami, które mogą dodawać do niego pakiety.

Jest to przydatne z kilku powodów:

  • Pozwala organizacjom jasno określić, które paczki są „oficjalne”, a które nie.
    • Na przykład, jeśli pakiet ma zakres @angular, wiesz, że został opublikowany przez główny zespół Angular.
  • Nazwa pakietu musi być unikalna dla zakresu, w którym jest opublikowany, a nie dla całego rejestru.
    • Na przykład nazwa pakietu httpjest już zajęta w głównym repozytorium, ale Angular też może to mieć @angular/http.

Powodem, dla którego pakiety o zasięgu nie są wyświetlane w wyszukiwaniu publicznym, jest to, że wiele z nich to prywatne pakiety tworzone przez organizacje korzystające z płatnych usług NPM i nie są wygodne otwieranie wyszukiwania, dopóki nie będą całkowicie pewni, że nie są upublicznienie czegokolwiek, co nie powinno być publiczne - z prawnego punktu widzenia jest to całkiem zrozumiałe.

Aby uzyskać więcej informacji, zobacz dokumenty NPM i dokumenty Angular .

EDYCJA: Wygląda na to, że pakiety o zasięgu publicznym pokazują się teraz poprawnie podczas wyszukiwania!

Joe Clay
źródło
68

Zasadniczo istnieją dwa typy modułów na npm, są one -

  • Moduły globalne - są to moduły zgodne z istniejącą konwencją nazewnictwa. Ty require('foo')i tam jest wiele radości. Są własnością jednej lub więcej osób za pośrednictwem npm install XYZpolecenia.

  • Moduły o zasięgu - są to nowe moduły, które są „zakresowane” pod nazwą organizacji, która zaczyna się @od nazwy organizacji, ukośnika, a na końcu nazwy pakietu, np @someOrgScope/packagename. Zakresy są sposobem grupowania powiązanych pakietów, a także wpływają na kilka rzeczy na temat sposobu traktowania pakietu przez npm.

Pakiet o zasięgu jest instalowany poprzez odniesienie go do nazwy, poprzedzonej znakiem @, w instalacji npm:

npm install @myorg/mypackage

Zobacz też

Pardeep Jain
źródło