Что означает префикс «at» (@) в пакетах npm?

295

В документации по Angular Component Router я наткнулся на команду npm, которую я никогда раньше не видел, и я не понимаю, что происходит:

npm install @angular/router --save

Каково значение @angular/router ?

Является ли вся строка именем пакета? Но тогда я не нахожу этот пакет, когда использую поиск на npmjs.com . А также поиск из командной строки не возвращает такой пакет:

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

Так это @angular/какой-то механизм префикса в npm? И как это работает?

jbandi
источник
7
npm help scope
завершающий слеш
3
@trailingslash Это отличный ответ! (не должно быть комментарием.)
Ограниченное Искупление

Ответы:

326

Это новая функция NPM, называемая «пакетными пакетами», которая эффективно позволяет пространствам имен пакетов NPM. У каждого пользователя и организации в NPM есть своя область действия, и они являются единственными людьми, которые могут добавлять пакеты в него.

Это полезно по нескольким причинам:

  • Это позволяет организациям прояснить, какие пакеты являются «официальными», а какие нет.
    • Например, если у пакета есть область действия @angular, вы знаете, что он был опубликован основной группой Angular.
  • Имя пакета должно быть уникальным только для области, в которой он опубликован, а не для всего реестра.
    • Например, имя пакета httpуже занято в главном репозитории, но Angular также может его иметь @angular/http.

Причина, по которой пакеты с выбранной областью не отображаются в открытом поиске заключается в том, что многие из них являются частными пакетами, созданными организациями, использующими платные сервисы NPM, и им неудобно открывать поиск, пока они не будут полностью уверены, что они не являются собираюсь сделать что-то публичное, что не должно быть публичным - с юридической точки зрения это довольно понятно.

Для получения дополнительной информации см. Документацию NPM и документацию Angular. .

РЕДАКТИРОВАТЬ: Похоже, что пакеты общего назначения теперь правильно отображаются в поиске!

Джо Клэй
источник
68

В основном на npm есть два типа модулей:

  • Глобальные модули - это модули, которые следуют соглашению об именах, которое существует сегодня. Тебе require('foo')и там много радости. Они принадлежат одному или нескольким людям через npm install XYZкоманду.

  • Модули с областями видимости - это новые модули, которые «ограничены» под названием организации, которое начинается с @имени организации, косой черты и, наконец, имени пакета, например @someOrgScope/packagename. Области являются способом группирования связанных пакетов, а также влияют на некоторые аспекты способа обработки пакета npm.

Пакет с установленной областью устанавливается путем ссылки на него по имени, которому предшествует @ -symbol, в npm install:

npm install @myorg/mypackage

смотрите также

Пардип Джайн
источник