¿Cuál es el significado del prefijo "at" (@) en los paquetes npm?

Resuelto jbandi asked hace 8 años • 4 respuestas

En la documentación de Angular Component Router me topé con un comando npm que nunca había visto antes y no entiendo qué está pasando:

npm install @angular/router --save

Cuál es el significado de @angular/router?

¿La cadena completa es un nombre de paquete? Pero luego no encuentro ese paquete cuando uso la búsqueda en npmjs.com . Y además la búsqueda por línea de comandos no devuelve dicho paquete:

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

Entonces, ¿existe @angular/algún tipo de mecanismo de prefijo en npm? Y, ¿cómo funciona?

jbandi avatar Apr 17 '16 00:04 jbandi
Aceptado

Esta es una nueva característica de NPM llamada 'paquetes con alcance', que efectivamente permite que los paquetes NPM tengan espacios de nombres. Cada usuario y organización en NPM tiene su propio alcance y son las únicas personas que pueden agregarle paquetes.

Esto es útil por varias razones:

  • Permite a las organizaciones dejar claro qué paquetes son "oficiales" y cuáles no.
    • Por ejemplo, si un paquete tiene el alcance @angular, sabrá que fue publicado por el equipo central de Angular.
  • El nombre del paquete sólo tiene que ser exclusivo del ámbito en el que se publica, no de todo el registro.
    • Por ejemplo, el nombre del paquete ya está en el repositorio principal, pero Angular también httppuede tenerlo .@angular/http

La razón por la que los paquetes con alcance no aparecen en la búsqueda pública es porque muchos de ellos son paquetes privados creados por organizaciones que utilizan los servicios pagos de NPM y no se sienten cómodos abriendo la búsqueda hasta que puedan estar totalmente seguros de que no lo son. hacer público cualquier cosa que no debería serlo; desde una perspectiva legal, esto es bastante comprensible.

Para obtener más información, consulte los documentos de NPM y los documentos de Angular .

EDITAR: ¡ Parece que los paquetes de ámbito público ahora aparecen correctamente en la búsqueda!

Joe Clay avatar Apr 16 '2016 17:04 Joe Clay

Básicamente, hay dos tipos de módulos en npm, son:

  • Módulos globales: son módulos que siguen la convención de nomenclatura que existe en la actualidad. Vosotros require('foo')y allí hay mucho regocijo. Son propiedad de una o más personas a través del npm install XYZmando.

  • Módulos con alcance: estos son módulos nuevos que tienen "alcance" bajo el nombre de una organización que comienza con el @nombre de la organización, una barra y finalmente el nombre del paquete, por ejemplo @someOrgScope/packagename. Los ámbitos son una forma de agrupar paquetes relacionados y también afectan algunas cosas sobre la forma en que npm trata el paquete.

Un paquete con ámbito se instala haciendo referencia a él por su nombre, precedido por un símbolo @, en npm install:

npm install @myorg/mypackage

ver también

  • http://blog.nodejitsu.com/a-summary-of-scoped-modules-in-npm/

  • https://docs.npmjs.com/misc/scope

Pardeep Jain avatar Apr 16 '2016 19:04 Pardeep Jain

@tiene diferentes medios según su lugar en el nombre del paquete npm.

Un paquete es:

  1. Una carpeta que contiene un programa descrito por un package.jsonarchivo.
  2. Un tarball comprimido que contiene (1).
  3. Una URL que se resuelve en (2).
  4. A <name>@<version>que se publica en el registro con (3).
  5. A <name>@<tag>que apunta a (4).
  6. A <name>que tiene una etiqueta "más reciente" que satisface (5).
  7. A <git remote url>que se resuelve en (1).

instalación npm [<@scope>/]<nombre>

<scope>es opcional. El paquete se descargará del registro asociado con el alcance especificado. Si no hay ningún registro asociado con el alcance dado, se asume el registro predeterminado.

Nota: si no incluye el @símbolo - en el nombre de su alcance, npm lo interpretará como un repositorio de GitHub, consulte a continuación. Los nombres de los ámbitos también deben ir seguidos de una barra.

instalación npm [<@scope>/]<nombre>@<etiqueta>

Instale la versión del paquete al que hace referencia la etiqueta especificada. Si la etiqueta no existe en los datos de registro de ese paquete, esto fallará.

Ejemplo:

npm install packagename@latest
npm install @myorg/mypackage@latest

npm install [<@scope>/]<nombre>@<versión>

Instale la versión especificada del paquete. Esto fallará si la versión no se ha publicado en el registro.

Ejemplo:

npm install packagename@0.1.1
npm install @myorg/privatepackage@1.5.0

npm install [<@scope>/]<nombre>@<rango de versiones>

Instale una versión del paquete que coincida con el rango de versiones especificado.

Ejemplo:

npm install packagename@">=0.1.0 <0.2.0"
npm install @myorg/privatepackage@">=0.1.0 <0.2.0"
Ravi Raja Jangid avatar Oct 15 '2020 17:10 Ravi Raja Jangid

¿Qué son los módulos con alcance?

Todos los paquetes npm tienen un nombre y este nombre debe ser único. Un paquete npm con ámbito sigue las mismas reglas que otros nombres de paquetes npm (caracteres seguros para URL, guiones bajos o sin puntos iniciales). Cuando se usan en nombres de paquetes, los ámbitos están precedidos por un @símbolo y seguidos por una barra diagonal /, por ejemplo

@somescope/somepackagename

Los módulos de alcance de npm generalmente se agrupan en paquetes de npm relacionados. Cuando se registra para obtener una cuenta de usuario de npm o crea una organización. Cada usuario/organización de npm tiene su propio alcance, y solo ellos y sus empleados pueden agregar paquetes en su alcance. Por lo general, se le otorga un alcance que coincide con su nombre de usuario u organización. Puede utilizar este ámbito como espacio de nombres para paquetes relacionados.

Como usuario de npm, no tiene que preocuparse de que alguien tome el nombre de su paquete antes que usted. Por lo tanto, utilizar el módulo de alcance también es una buena forma de organizar los paquetes npm para una organización.

Ventajas de utilizar paquetes con ámbito :

  • Los paquetes con alcance permiten a las organizaciones administrar los paquetes privados.
  • El nombre del paquete con ámbito solo tiene que ser exclusivo del ámbito en el que se publica, no de todo el registro npm.

Por lo general, las organizaciones optan por mantener privados sus paquetes de alcance y no aparecen en la búsqueda pública por varias razones.

JustAG33K avatar Aug 19 '2022 18:08 JustAG33K