Azure Artifacts'te Npm kapsamlarını kullanma

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Npm kapsamları, ilgili paketleri gruplar halinde kategorilere ayırmak için bir araç görevi görür. Bu kapsamlar, çakışmalarla karşılaşmadan farklı kullanıcılar tarafından oluşturulanlarla aynı adlara sahip paketler oluşturmanıza olanak tanır. Kapsamları kullanarak, @scopeName kapsam ön ekini ekleyerek ve .npmrc dosyasını yalnızca bu kapsama sahip bir akışı kullanacak şekilde yapılandırarak genel ve özel paketleri ayırma olanağınız vardır.

Azure Artifacts, akışlardan veya genel kayıt defterlerinden hem kapsamlı hem de kapsamsız paketleri yayımlama ve indirme özelliği sağlar. Npm kapsamları, İnternet erişimi olmayan şirket içinde barındırılan sunucularla çalışırken özellikle değerlidir çünkü bu tür senaryolarda yukarı akış kaynaklarını yapılandırmak mümkün değildir. Özetle, kapsamları kullanırken:

  • İsim çakışmaları konusunda endişelenmemiz gerekmez.
  • Paketlerimizi yüklemek veya yayımlamak için npm kayıt defterini değiştirmeniz gerekmez.
  • Her npm kuruluşunun/kullanıcısının kendi kapsamı vardır ve paketleri yalnızca sahibi veya kapsam üyeleri kendi kapsamlarında yayımlayabilir.

Proje kurulumu

  1. Azure DevOps kuruluşunuzda oturum açın ve projenize gidin.

  2. Yapıtlar'ı ve ardından beslenen Bağlan seçin.

    Akışa bağlanmayı gösteren ekran görüntüsü.

  3. npm'yi ve ardından Diğer'i seçin.

  4. package.json ile aynı dizine bir .npmrc dosya ekleyin ve aşağıdaki kod parçacığını dosyanıza yapıştırın.

    • Kuruluş kapsamlı akış:

      registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME/_packaging/<FEED_NAME>/npm/registry/
      
      always-auth=true
      
    • Proje kapsamlı akış:

      registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/
      
      always-auth=true
      

Kimlik bilgilerini ayarlama

  1. Aşağıdaki kod parçacığını kullanıcı düzeyi .npmrc dosyanıza kopyalayın (Örnek: C:\Users\FabrikamUser.npmrc). Kaynak deponuzun içindeki .npmrc dosyasına yapıştırmadığınızdan emin olun.

    • Kuruluş kapsamlı akış:

      ; 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
      
    • Proje kapsamlı akış:

      ; 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. Paketleme>Okuma ve yazma kapsamları ile kişisel erişim belirteci oluşturun.

  3. Yeni oluşturulan kişisel erişim belirtecinizi kodlamak için aşağıdaki komutu çalıştırın. İstendiğinde, kişisel erişim belirtecinizi yapıştırın ve ardından elde edilen Base64 kodlanmış değerini kopyalayın.

    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(); })"
    
  4. Dosyanızı .npmrc açın ve yer tutucuyu [BASE64_ENCODED_PERSONAL_ACCESS_TOKEN] yeni oluşturduğunuz kodlanmış kişisel erişim belirtecinizle değiştirin.

Kapsam kurulumu

.npmrc dosyanızda değerini ile @ScopeName:registry=<YOUR_SOURCE_URL>değiştirinregistry=<YOUR_SOURCE_URL>.

package.json dosyanıza hem kapsam hem de paket adlarını şu şekilde eklediğinizden emin olun: { "name": "@ScopeName/PackageName" }. Aşağıdaki örneklere bakın:

  • Kuruluş kapsamlı akış:

    @ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/
    
    always-auth=true
    
    {
    "name": "@ScopeName/PackageName" 
    }
    
  • Proje kapsamlı akış:

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

    @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"
      }
    

Kapsamlı paketleri yayımlama

Bir komut istemi penceresi açın, proje dizininize gidin ve kapsamlı paketinizi yayımlamak için aşağıdaki komutu çalıştırın. Örneğimizde paketimiz görünümün @local altında listelenmiştir.

npm publish

Azure Artifacts akışındaki kapsamlı paketi gösteren ekran görüntüsü.

Yukarı akış kaynakları ile kapsamlar karşılaştırması

Yukarı akış kaynakları, akışınızda kapsamlı ve kapsamsız paketlerin yanı sıra npmjs.com gibi genel kayıt defterlerinden hem kapsamlı hem de kapsamsız paketleri kullanma esnekliği sunar.

Ancak kapsamlar paketlerinize bir adlandırma kısıtlaması uygular: her paket adı ile @<scope>başlamalıdır. Özel paketlerinizi genel kayıt defterlerinde yayımlamak istiyorsanız, bunu kapsamları olduğu gibi yapmanız gerekir. Paketlerinizi dağıtırken paket kapsamlarını kaldırırsanız, package.json dosyanızdaki tüm başvuruları güncelleştirmeniz gerekir. Bunu göz önünde bulundurarak kapsamlar, yukarı akış kaynaklarına uygun bir alternatif olarak kullanılabilir.