Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Los ámbitos de Npm sirven como medio para clasificar los paquetes relacionados en grupos. Estos ámbitos permiten crear paquetes con nombres idénticos a los creados por distintos usuarios sin encontrar conflictos. Mediante el uso de ámbitos, tiene la capacidad de separar paquetes públicos y privados agregando el prefijo de ámbito @scopeName y configurando el archivo .npmrc para usar exclusivamente una fuente con ese ámbito determinado.
Azure Artifacts proporciona la posibilidad de publicar y descargar paquetes definidos y no definidos desde orígenes o registros públicos. Los ámbitos de Npm son especialmente valiosos cuando se trabaja con servidores autohospedados en las instalaciones que carecen de acceso a internet, ya que la configuración de fuentes upstream en estos escenarios no es factible. En resumen, al usar ámbitos:
- No tenemos que preocuparnos por las colisiones de nombres.
- No es necesario cambiar el registro de 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.
Configuración del proyecto
Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.
Seleccione Artefactos y, a continuación, seleccione Conectar a la fuente.
Seleccione npm y, a continuación, seleccione Otro.
Agregue un
.npmrc
archivo en el mismo directorio que el package.jsony pegue el siguiente fragmento de código en el archivo.Feed con ámbito de organización:
registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME/_packaging/<FEED_NAME>/npm/registry/ always-auth=true
Fuente con ámbito de proyecto:
registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/ always-auth=true
Configuración de credenciales
Copie el siguiente fragmento de código en el archivo de nivel
.npmrc
de usuario (ejemplo: C:\Users\FabrikamUser.npmrc). Asegúrese de no pegarlo en el archivo .npmrc dentro del repositorio de origen.Feed con ámbito de 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
Fuente con ámbito de proyecto:
; 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
Genere un token de acceso personal con los ámbitos de empaquetado> y lectura y escritura.
Ejecute el comando siguiente para codificar el token de acceso personal recién generado. Cuando se le solicite, pegue el token de acceso personal y, a continuación, copie el valor codificado en Base64 resultante.
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(); })"
Abra el
.npmrc
archivo y reemplace el marcador de posición[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
por el token de acceso personal codificado que acaba de crear.
Configuración del ámbito
En el archivo .npmrc, reemplace registry=<YOUR_SOURCE_URL>
con @ScopeName:registry=<YOUR_SOURCE_URL>
.
Asegúrese de incluir tanto el ámbito como los nombres de paquete en el archivo package.json como se indica a continuación: { "name": "@ScopeName/PackageName" }
. Consulte los ejemplos siguientes:
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:
@local:registry=https://pkgs.dev.azure.com/FabrikamOrg/NpmDemo/_packaging/FabrikamFeed/npm/registry/ always-auth=true
{ "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" }
Publicación de paquetes con ámbito
Abra una ventana de comandos, navegue al directorio de su proyecto y ejecute el siguiente comando para publicar su paquete delimitado. En nuestro ejemplo, dentro de la vista @local, aparece nuestro paquete.
npm publish
Fuentes ascendentes frente a ámbitos
Los orígenes ascendentes ofrecen la mayor flexibilidad para usar una combinación de paquetes delimitados y no delimitados en tu repositorio, así como paquetes delimitados y no delimitados de registros públicos, como npmjs.com.
Sin embargo, los ámbitos imponen una restricción de nomenclatura en los paquetes: cada nombre de paquete debe comenzar con @<scope>
. Si desea publicar sus paquetes privados en registros públicos, debe hacerlo con los alcances intactos. Si eliminas los ámbitos de los paquetes al desplegar tus paquetes, deberás actualizar todas las referencias en tu archivo package.json. Teniendo esto en cuenta, los ámbitos pueden servir como una alternativa viable a los orígenes ascendentes.