Яке значення префікса "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? І як це працює?



3
@trailingslash Це чудова відповідь! (не слід коментувати.)
Обмежене спокутування

Відповіді:


325

Це нова особливість NPM під назвою "широкомасштабні пакети", яка фактично дозволяє розмежувати пакети NPM. Кожен користувач та організація в NPM має власну сферу, і вони є єдиними людьми, які можуть додати до нього пакети.

Це корисно з кількох причин:

  • Це дозволяє організаціям зрозуміти, які пакунки є «офіційними», а які - не.
    • Наприклад, якщо пакет має обсяг @angular, ви знаєте, що його опублікувала команда Angular core.
  • Назва пакету повинна бути унікальною лише для області, в якій він публікується, а не для всього реєстру.
    • Наприклад, ім'я пакета httpвже взято в основний сховище, але Angular також може мати @angular/http.

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

Для отримання додаткової інформації див. Документи NPM та кутові документи .

РЕДАКТУВАННЯ: Виявляється, що загальнодоступні пакети, що охоплюються, відображаються належним чином у пошуку!


68

В основному є два типи модулів на npm, вони -

  • Глобальні модулі - це модулі, які слідують умові іменування, що існує сьогодні. Ви require('foo')і там багато радієте. Вони належать одному чи декільком людям через npm install XYZкоманду.

  • Розширені модулі - це нові модулі, які "охоплюються" під назвою організації, що починається з @імені організації, косою рисою і нарешті назви пакета, наприклад @someOrgScope/packagename. Області застосування - це спосіб групування пов'язаних пакетів разом, а також впливає на кілька речей про те, як npm розглядає пакет.

Об'ємний пакет встановлюється, посилаючись на ім'я, перед яким розміщено @ -символ, в npm install:

npm install @myorg/mypackage

дивитися також

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.