Usar ámbitos de npm

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 - TFS 2017

Los ámbitos npm son una manera de agrupar paquetes relacionados. Un ámbito permite crear un paquete con el mismo nombre que un paquete creado por otro usuario u organización sin conflictos. Permiten al usuario separar paquetes públicos y privados antefijiendo sus paquetes con un ámbito y configurando el archivo para que solo use una fuente de Azure Artifacts @SCOPE_NAME.npmrc para ese ámbito. Con Azure Artifacts, puede publicar y descargar paquetes con ámbito y sin ámbito hacia o desde las fuentes de Artifacts o registros públicos. El uso de ámbitos npm también es útil con servidores locales auto-hospedados que no tienen acceso a Internet porque no es posible configurar orígenes ascendentes en ese caso. Uso de ámbitos:

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

Nota

Necesita npm versión 2 o posterior para usar ámbitos npm. Ejecute npm install npm@latest -g para actualizar a la versión más reciente.

Configuración del proyecto

Para usar una fuente Azure Artifacts con un ámbito específico, será necesario configurar el archivo .npmrc y, a continuación, configurar las credenciales para autenticarse con la fuente.

Configuración del proyecto

  1. En el proyecto, seleccione Azure Artifactsy, a continuación, seleccione Conectar para alimentar.

    Captura de pantalla que muestra cómo conectarse a una fuente.

  2. Seleccione npm.

  3. Seleccione la pestaña Otros.

    Captura de pantalla que muestra cómo configurar un proyecto.

  4. Agregue un archivo .npmrc en el mismo directorio que package.json y pegue el siguiente fragmento de código en el archivo.

    registry=https://pkgs.dev.azure.com/<yourOrganization>/_packaging/<yourFeed>/npm/registry/
    
    always-auth=true
    

Configuración de credenciales

  1. Copie el siguiente fragmento de código en el archivo .npmrc.

    • Fuente de ámbito de la organización:

      ; begin auth token
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/:username=[ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value
      ; end auth token
      
    • Project fuente con ámbito de aplicación:

      ; begin auth token
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value
      ; end auth token
      
  2. Genere un token de acceso personal conámbitos de lectura y escritura de empaquetado.

  3. Encode your newly generated personal access token (Codificar el token de acceso personal recién generado) de la siguiente manera:

    1. Ejecute el siguiente comando en una ventana del símbolo del sistema con privilegios elevados y pegue el token de acceso personal cuando se le solicite:

      node -e "require('readline') .createInterface({input:process.stdin,output:process.stdout,historySize:0}) .question('PAT> ',p => { b64=Buffer.from(p.trim()).toString('base64');console.log(b64);process.exit(); })"
      

      También puede usar el siguiente comando para convertir el token de acceso personal a Base64 en función del sistema operativo:

      • Windows:

        [Convert]::ToBase64String([system.Text.Encoding]::UTF8.GetBytes("YOUR_PAT_GOES_HERE"))
        
      • LinuxMac:

        echo -n "YOUR_PAT_GOES_HERE" | base64
        
    2. Copie el valor codificado en Base64.

  4. Abra el archivo .npmrc y reemplace el marcador de posición por el token de acceso personal codificado por el [BASE64_ENCODED_PERSONAL_ACCESS_TOKEN] usuario que acaba de crear.

  1. En Paquetes,seleccione Conectar para alimentar.

  2. Seleccione npm.

  3. Seleccione Generate npm credentials (Generarcredenciales de npm) y copie las credenciales para agregarlas manualmente al archivo .npmrc del usuario:

    Captura de pantalla que muestra cómo generar credenciales de npm en TFS.

En el archivo .npmrc, reemplace registry=<YOUR_SOURCE_URL> por @SCOPE_NAME:registry=<YOUR_SOURCE_URL> .

Nota

Asegúrese de agregar los nombres de ámbito y paquete al package.json archivo: { "name": "@SCOPE_NAME/PACKAGE_NAME" } .

¿Orígenes o ámbitos ascendentes?

Los orígenes ascendentes ofrecen la máxima flexibilidad para usar una combinación de paquetes con ámbito y sin ámbito en la fuente, así como paquetes con ámbito y sin ámbito de registros públicos, como npmjs.com.

Los ámbitos agregan otra restricción al asignar un nombre a los paquetes: cada nombre de paquete debe comenzar por @<scope> . Si desea publicar los paquetes privados en registros públicos, debe hacerlo con los ámbitos intactos. Si quita ámbitos de paquete al implementar los paquetes, deberá actualizar todas las referencias de package.json. Con esto en mente, los ámbitos pueden ser una alternativa viable a los orígenes ascendentes.