Quelle est la signification du préfixe «at» (@) sur les packages npm?

Dans la documentation Angular Component Router, je suis tombé sur une commande npm jamais vue auparavant et je ne comprends pas ce qui se passe:

npm install @angular/router --save 

Quelle est la signification de @angular/router ?

La chaîne entière est-elle un nom de package? Mais alors je ne trouve pas ce paquet lorsque j’utilise la recherche sur npmjs.com . Et aussi la recherche en ligne de commande ne retourne pas un tel paquet:

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

Donc, le mécanisme @angular/ une sorte de préfixe dans npm? Et comment ça marche?

Il s’agit d’une nouvelle fonctionnalité de NPM appelée «scoped packages», qui permet aux paquets NPM d’être espacés. Chaque utilisateur et organisation sur NPM a sa propre scope et ils sont les seuls à pouvoir y append des packages.

Ceci est utile pour plusieurs raisons:

  • Cela permet aux organisations de préciser quels paquets sont «officiels» et lesquels ne le sont pas.
    • Par exemple, si un paquet a la scope @angular , vous savez qu’il a été publié par l’équipe principale Angular.
  • Le nom du package doit être unique à la scope dans laquelle il est publié, pas à la totalité du registre.
    • Par exemple, le nom du package http est déjà pris dans le référentiel principal, mais Angular peut également avoir @angular/http .

La raison pour laquelle les paquets ciblés n’apparaissent pas dans les recherches publiques est que beaucoup d’entre eux sont des paquets privés créés par des organisations utilisant les services payants de NPM et qu’ils ne sont pas à l’aise pour ouvrir la recherche jusqu’à ce qu’ils en soient certains. va rendre n’importe quoi public qui ne devrait pas être public – d’un sharepoint vue légal, c’est assez compréhensible.

Pour plus d’informations, consultez les documents NPM et les documents Angular .

EDIT: Il semble que les paquets publics scopés apparaissent maintenant correctement dans la recherche!

Fondamentalement, il existe deux types de modules de npm qui sont –

  • Modules globaux – ce sont des modules qui suivent la convention de dénomination existante. Vous avez require('foo') et il y a beaucoup de joie. Ils appartiennent à une ou plusieurs personnes via la commande npm XYZ .

  • Modules Scoped – ce sont de nouveaux modules qui sont “définis” sous un nom d’organisation qui commence par un @ et suivi d’une barre oblique, par exemple @somescope/somepackagename . Les scopes permettent de regrouper des packages associés et ont également un impact sur la manière dont npm traite le package.

Un package scoped est installé en le référençant par son nom, précédé par un symbole @, dans npm install:

 npm install @myorg/mypackage 

voir également