Qual è il significato del prefisso "at" (@) sui pacchetti npm?


294

Nella documentazione di Angular Component Router mi sono appena imbattuto in un comando npm che non avevo mai visto prima e non capisco cosa sta succedendo:

npm install @angular/router --save

Qual è il significato di @angular/router?

L'intera stringa è un nome di pacchetto? Ma poi non trovo quel pacchetto quando uso la ricerca su npmjs.com . E anche la ricerca da riga di comando non restituisce tale pacchetto:

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

Quindi c'è un @angular/qualche tipo di meccanismo di prefisso in npm? E come funziona?


7
npm help scope
barra finale

3
@trailingslash Questa è un'ottima risposta! (Non dovrebbe essere un commento.)
Espiazione limitata il

Risposte:


324

Questa è una nuova funzionalità di NPM denominata "pacchetti con ambito", che consente in modo efficace che i pacchetti NPM siano spaziati. Ogni utente e organizzazione su NPM ha il proprio ambito di applicazione e sono le uniche persone che possono aggiungere pacchetti ad esso.

Ciò è utile per diversi motivi:

  • Consente alle organizzazioni di chiarire quali pacchetti sono "ufficiali" e quali no.
    • Ad esempio, se un pacchetto ha lo scopo @angular, sai che è stato pubblicato dal core team angolare.
  • Il nome del pacchetto deve essere unico per l'ambito in cui è pubblicato, non per l'intero registro.
    • Ad esempio, il nome del pacchetto httpè già preso nel repository principale, ma anche Angular può averlo @angular/http.

Il motivo per cui i pacchetti con ambito non vengono visualizzati nella ricerca pubblica è perché molti di essi sono pacchetti privati ​​creati da organizzazioni che utilizzano i servizi a pagamento di NPM e non si sentono a proprio agio ad aprire la ricerca fino a quando non possono essere totalmente certi di non esserlo renderà tutto ciò che non dovrebbe essere pubblico - dal punto di vista legale, questo è abbastanza comprensibile.

Per ulteriori informazioni, consultare i documenti NPM e i documenti angolari .

EDIT: sembra che i pacchetti con ambito pubblico ora vengano visualizzati correttamente nella ricerca!


68

Fondamentalmente ci sono due tipi di moduli su npm, sono -

  • Moduli globali: sono moduli che seguono la convenzione di denominazione che esiste oggi. Tu require('foo')e te ne gioiamo molto. Sono di proprietà di una o più persone tramite il npm install XYZcomando.

  • Moduli con ambito: si tratta di nuovi moduli che vengono "individuati" sotto un nome di organizzazione che inizia con un @nome di organizzazione, una barra e infine il nome del pacchetto, ad es @someOrgScope/packagename. Gli ambiti sono un modo per raggruppare i pacchetti correlati e influiscono anche su alcuni aspetti del modo in cui npm tratta il pacchetto.

Un pacchetto con ambito viene installato facendo riferimento a esso per nome, preceduto da un simbolo @, nell'installazione di npm:

npm install @myorg/mypackage

Guarda anche

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.