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
Masuk ke organisasi Azure DevOps Anda, lalu navigasikan ke proyek Anda.
Pilih Artefak, lalu pilih Koneksi untuk disalurkan.
Pilih npm, lalu pilih Lainnya.
.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
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
Hasilkan token akses pribadi dengan Cakupan Baca &tulis Kemasan>.
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(); })"
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
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.