Uso de ámbitos de npm para administrar paquetes en Azure Artefacto

Servicios de Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

Los ámbitos de npm ayudan a clasificar los paquetes relacionados en grupos. Permiten crear paquetes con los mismos nombres que los paquetes creados por otros usuarios sin conflictos. Mediante el uso de ámbitos, puede separar los paquetes públicos y privados agregando el prefijo de ámbito @scopeName y configurando el .npmrc archivo para usar una fuente con ese ámbito.

Azure Artifacts admite la publicación y descarga de paquetes con ámbito y sin ámbito desde fuentes o registros públicos. Los ámbitos de npm son especialmente útiles cuando trabaja con servidores locales autohospedados que no tienen acceso a Internet, porque configurar orígenes ascendentes en esos escenarios no es viable. En resumen, cuando usa ámbitos:

  • No tiene que preocuparse por las colisiones de nombres.
  • No es necesario cambiar el registro de npm para instalar o publicar paquetes.
  • Cada organización o usuario de npm tiene su propio ámbito, y solo el propietario o los miembros de ese ámbito pueden publicar paquetes en él.

Prerequisites

Producto Requisitos
Azure DevOps - Una organización de Azure DevOps.
- Un Azure DevOps project.
- Un feed de Azure Artifacts.
- Descargue e instale Node.js y npm.

Conexión a la fuente

Antes de configurar ámbitos de npm, conecte el proyecto a la fuente de Azure Artifacts. Asegúrese de cumplir los requisitos previos y de crear un feed y, a continuación, siga estos pasos.

Azure Artifacts recomienda usar dos archivos .npmrc independientes. Mantenga un archivo en el directorio de usuario para almacenar las credenciales y mantenga el segundo archivo en el mismo directorio que el archivo package.json para almacenar la configuración específica de la fuente.

  1. Inicie sesión en Azure DevOps y vaya al proyecto.

  2. Seleccione Artefactos y, a continuación, seleccione tu feed en el menú desplegable.

  3. Seleccione Conectar a la fuente y, a continuación, seleccione npm en el panel de navegación izquierdo.

  4. Si esta es la primera vez que usa Azure Artifacts con npm, seleccione Obtener las herramientas y siga las instrucciones para instalar los requisitos previos para el sistema operativo. Primero debe instalar Node.js y npm. A continuación, en función del sistema operativo, instale vsts-npm-auth para Windows o configure credenciales para entornos que no sean de Windows. Para obtener instrucciones para sistemas que no son Windows, consulte Conectarse a una fuente - Otros.

  5. Cree un archivo .npmrc en el mismo directorio que el archivo package.json y, a continuación, pegue el fragmento de código de la sección de configuración de Project en ese archivo.

  6. En Windows, ejecute el siguiente comando para agregar un token de Azure Artifacts al archivo .npmrc de nivel de usuario. No es necesario ejecutar este comando cada vez. Cuando el token expira, npm devuelve un error 401 No autorizado para indicar que es el momento de actualizarlo.

vsts-npm-auth -config .npmrc

Note

vsts-npm-authno se admite en Azure DevOps Server. Para obtener instrucciones para sistemas que no sean Windows, consulte Conectarse a una fuente - Otros.

Configuración del ámbito

Para usar ámbitos con Azure Artifacts, actualice el archivo .npmrc de su proyecto para que los paquetes con ámbito que publique o instale se resuelvan a través de su fuente. Reemplace registry=<YOUR_SOURCE_URL> por @ScopeName:registry=<YOUR_SOURCE_URL>.

Actualice también el archivo package.json para incluir el nombre del ámbito y el nombre del paquete, por ejemplo: { "name": "@ScopeName/PackageName" }. Los siguientes ejemplos muestran cómo configurar canales de ámbito de organización y de ámbito de proyecto.

  • Feed con ámbito de organización:

    @ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/
    
    always-auth=true
    
    {
      "name": "@ScopeName/PackageName"
    }
    
  • Fuente con ámbito de proyecto:

    @ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/
    
    always-auth=true
    
    {
      "name": "@ScopeName/PackageName"
    }
    

Ejemplo

  • El archivo .npmrc :

    @local:registry=https://pkgs.dev.azure.com/FabrikamOrg/NpmDemo/_packaging/FabrikamFeed/npm/registry/
    
    always-auth=true
    
  • El archivo package.json :

    {
      "name": "@demo/js-e2e-express-server",
      "version": "2.0.0",
      "description": "JavaScript server written with Express.js",
      "main": "index.js",
      "directories": {
        "doc": "docs",
        "test": "test"
      }
    }
    

Publicar paquetes con ámbito

Después de configurar su ámbito y actualizar los archivos del proyecto, abra una ventana del símbolo del sistema, vaya al directorio de su proyecto y ejecute el siguiente comando para publicar el paquete con ámbito. En el ejemplo anterior, el paquete se publica bajo el ámbito @local.

npm publish

Orígenes ascendentes frente a ámbitos

Los orígenes ascendentes proporcionan la mayor flexibilidad. Mediante orígenes ascendentes, puede consumir paquetes con y sin ámbito de su fuente de Azure Artifacts y, al mismo tiempo, usar paquetes de registros públicos como npmjs.com. Este enfoque funciona bien cuando se desea que una sola fuente actúe como el origen principal de los paquetes internos y las dependencias externas aprobadas.

Los ámbitos son más restrictivos, pero pueden ser una opción práctica en el escenario correcto. Al usar ámbitos, cada nombre de paquete debe comenzar con @<scope>, lo que significa que debe adoptar y mantener esa convención de nomenclatura en los paquetes. Por ejemplo, si publicas un paquete como @local/my-package, debes seguir usando ese nombre de ámbito en cualquier lugar donde se haga referencia a ese paquete.

Este requisito puede agregar sobrecarga, especialmente si planea publicar los mismos paquetes en un registro público más adelante. Si elimina los scopes al desplegar sus paquetes, también debe actualizar las referencias correspondientes en sus archivos package.json y en cualquier proyecto dependiente.

Incluso con esas limitaciones, los ámbitos pueden servir como alternativa viable cuando los orígenes ascendentes no resultan prácticos. Esto es especialmente cierto en entornos aislados o autoadministrados en los que no se dispone de acceso a repositorios públicos y se quiere evitar colisiones de nombres de paquetes, manteniéndolos organizados dentro de la fuente de paquetes.