Bagikan melalui


Menggunakan cakupan Npm di Azure Artifacts

Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019

Cakupan Npm berfungsi sebagai sarana untuk mengategorikan paket terkait ke dalam grup. Cakupan ini memungkinkan Anda membuat paket dengan nama yang identik dengan yang dibuat oleh pengguna yang berbeda tanpa mengalami konflik. Dengan menggunakan cakupan, Anda memiliki kemampuan untuk memisahkan paket publik dan privat dengan menambahkan awalan cakupan @scopeName dan mengonfigurasi file .npmrc untuk secara eksklusif menggunakan umpan dengan cakupan tertentu.

Azure Artifacts menyediakan kemampuan untuk menerbitkan dan mengunduh paket tercakup dan tidak tercakup dari umpan atau registri publik. Cakupan Npm sangat berharga ketika bekerja dengan server lokal yang dihost sendiri tidak memiliki akses internet, karena mengonfigurasi sumber hulu dalam skenario seperti itu tidak layak. Singkatnya, saat menggunakan cakupan:

  • Kita tidak perlu khawatir tentang tabrakan nama.
  • Tidak perlu mengubah registri npm untuk menginstal atau menerbitkan paket kami.
  • Setiap organisasi/pengguna npm memiliki cakupan mereka sendiri, dan hanya pemilik atau anggota cakupan yang dapat menerbitkan paket ke cakupan mereka.

Penyusunan proyek

  1. Masuk ke organisasi Azure DevOps Anda, lalu navigasikan ke proyek Anda.

  2. Pilih Artefak, lalu pilih Koneksi untuk disalurkan.

    Cuplikan layar memperlihatkan cara menyambungkan ke umpan.

  3. Pilih npm, lalu pilih Lainnya.

  4. .npmrc Tambahkan file di direktori yang sama dengan package.json Anda, dan tempelkan cuplikan berikut ke dalam file Anda.

    • Umpan cakupan organisasi:

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

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

Menyiapkan kredensial

  1. Salin cuplikan berikut ke dalam file tingkat .npmrc pengguna Anda, (Contoh: C:\Users\FabrikamUser.npmrc). Pastikan Anda tidak menempelkannya ke dalam file .npmrc dalam repositori sumber Anda.

    • Umpan cakupan organisasi:

      ; 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
      
    • Umpan cakupan proyek:

      ; 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. Hasilkan token akses pribadi dengan Cakupan Baca &tulis Kemasan>.

  3. Jalankan perintah berikut untuk mengodekan token akses pribadi yang baru dibuat. Saat diminta, tempelkan token akses pribadi Anda lalu salin nilai yang dikodekan Base64 yang dihasilkan.

    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. Buka file Anda .npmrc dan ganti tempat penampung [BASE64_ENCODED_PERSONAL_ACCESS_TOKEN] dengan token akses pribadi yang baru saja Anda buat.

Penyiapan cakupan

Dalam file .npmrc Anda, ganti registry=<YOUR_SOURCE_URL> dengan @ScopeName:registry=<YOUR_SOURCE_URL>.

Pastikan untuk menyertakan cakupan dan nama paket dalam file package.json Anda sebagai berikut: { "name": "@ScopeName/PackageName" }. Lihat contoh di bawah ini:

  • Umpan cakupan organisasi:

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

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

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

Menerbitkan paket terlingkup

Buka jendela prompt perintah, navigasikan ke direktori proyek Anda, dan jalankan perintah berikut untuk menerbitkan paket terlingkup Anda. Dalam contoh kami, paket kami tercantum di @local bawah tampilan.

npm publish

Cuplikan layar memperlihatkan paket terlingkup di umpan Azure Artifacts.

Sumber upstream vs cakupan

Sumber upstream memberi Anda fleksibilitas terbanyak untuk menggunakan kombinasi paket tercakup dan tidak tercakup dalam umpan Anda, serta paket tercakup dan tidak tercakup dari registri publik seperti npmjs.com.

Cakupan, bagaimanapun, memberlakukan pembatasan penamaan pada paket Anda: setiap nama paket harus dimulai dengan @<scope>. Jika Anda ingin menerbitkan paket privat Anda ke registri publik, Anda harus melakukannya dengan cakupan yang utuh. Jika Anda menghapus cakupan paket saat menyebarkan paket, Anda harus memperbarui semua referensi dalam file package.json Anda. Dengan mengingat hal itu, cakupan dapat berfungsi sebagai alternatif yang layak untuk sumber hulu.