web-dev-qa-db-fra.com

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

Dans le documentation du routeur à composants angulaires je viens de trébucher sur une commande npm que je n'ai jamais vue auparavant et je ne comprends pas ce qui se passe:

npm install @angular/router --save

Quel est le sens de @angular/router?

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

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

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

186
jbandi

Il s'agit d'une nouvelle fonctionnalité de NPM appelée "paquets étendus", qui permet effectivement aux paquets NPM d'être nommés. Chaque utilisateur et chaque organisation sur NPM a sa propre portée, et ils sont les seuls à pouvoir y ajouter des packages.

Ceci est utile pour plusieurs raisons:

  • Il permet aux organisations d'indiquer clairement quels paquets sont "officiels" et lesquels ne le sont pas.
    • Par exemple, si un package a la portée @angular, vous savez qu'il a été publié par l'équipe principale Angular.
  • Le nom du paquet doit seulement être unique pour la portée dans laquelle il est publié, pas pour tout le registre.
    • Par exemple, le nom du paquetage http est déjà pris dans le référentiel principal, mais Angular peut également avoir @angular/http.

La raison pour laquelle les paquets périmés n'apparaissent pas dans la recherche publique c'est parce que beaucoup d'entre eux sont des paquets privés créés par des organisations utilisant les services payants de NPM, et ils ne sont pas à l'aise pour lancer la recherche tant qu'ils ne le peuvent pas. être totalement certain qu'ils ne rendront pas public tout ce qui ne devrait pas l'être - d'un point de vue juridique, cela est assez compréhensible.

Pour plus d'informations, voir les documents NPM et les documents angulaires .

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

196
Joe Clay

En gros, il y a deux types de modules sur npm, ils sont -

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

  • Modules Scoped - il s’agit de nouveaux modules qui sont "scoped" sous un nom d’organisation commençant par @ le nom de l’organisation, une barre oblique et enfin le nom du package, par exemple. @someOrgScope/packagename. Les portées permettent de regrouper des packages associés et affectent également la façon dont npm traite le package.

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

npm install @myorg/mypackage

voir également

49
Pardeep Jain