Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022
Npm 範圍可作為將相關套件分類為群組的方法。 這些範圍可讓您建立套件,其名稱與不同使用者所建立的套件相同,而不會發生衝突。 藉由使用範圍,您可以透過新增範圍前綴詞 @scopeName 並設定 .npmrc 檔案,使其僅使用具有該特定範圍的來源,將公用和私用套件分隔開來。
Azure Artifacts 提供從摘要或公用登錄發佈和下載範圍和非範圍套件的功能。 Npm 範圍在使用無法連接網際網路的自我托管內部部署伺服器時特別有價值,因為在這種情況下無法設定上游來源。 總而言之,使用範圍時:
- 我們不必擔心名稱衝突。
- 不需要變更 npm 登錄,即可安裝或發佈我們的套件。
- 每個 npm 組織/使用者都有自己的範圍,而且只有擁有者或範圍成員可以將套件發佈至其範圍。
項目設定
登入您的 Azure DevOps 組織,然後流覽至您的專案。
選取 工件,然後選取 連接到供應來源。
選取 npm,然後選取 [其他]。
在與 package.json相同的目錄中新增一個
.npmrc檔案,然後將下列代碼段貼到該檔案中。組織範圍的資訊流:
registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME/_packaging/<FEED_NAME>/npm/registry/ always-auth=true專案範圍的動態消息:
registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/ always-auth=true
設定認證
將下列代碼段複製到您的用戶層級
.npmrc檔案(範例:C:\Users\FabrikamUser.npmrc)。 請確定您未將它貼到來源存放庫中的 .npmrc 檔案中。組織範圍的資訊流:
; 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專案範圍的動態消息:
; 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
使用封裝>範圍產生個人存取令牌。
執行下列命令來編碼您新產生的個人存取令牌。 出現提示時,貼上您的個人存取令牌,然後複製產生的Base64編碼值。
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(); })"備註
截至 2024 年 7 月,Azure DevOps 個人存取權杖 (PAT) 長度為 82 個字元。 某些工具在將標記編碼為 Base64 時可能會插入自動換行符。 若要避免這種情況,請將旗標與
-w0命令搭配使用,以確保輸出保持在單行上。 在本教學中,我們使用 Node 的 Buffer 方法,預設會產生單行 Base64 字串。開啟您的
.npmrc檔案,並將佔位元[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]取代為您剛才建立的編碼個人存取令牌。
範圍設定
在您的 .npmrc 檔案中,將 取代 registry=<YOUR_SOURCE_URL> 為 @ScopeName:registry=<YOUR_SOURCE_URL>。
請務必在 package.json 檔案中包含範圍和套件名稱,如下所示: { "name": "@ScopeName/PackageName" }。 請參閱下列範例:
組織範圍的資訊流:
@ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/ always-auth=true{ "name": "@ScopeName/PackageName" }專案範圍的動態消息:
@ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/ always-auth=true{ "name": "@ScopeName/PackageName" }範例:
@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" }
發佈限定範圍的套件
開啟命令提示字元視窗,流覽至您的專案目錄,然後執行下列命令來發佈您的範圍套件。 在我們的範例中,套件列在 @local 檢視中。
npm publish
上游來源與範圍
上游來源可讓您彈性地在摘要中使用範圍和非範圍套件的組合,以及來自公用登錄的範圍和非範圍套件,例如 npmjs.com。
不過,範圍會對您的套件施加命名限制:每個套件名稱都必須以 @<scope>開頭。 如果您想要將私人套件發佈至公用登錄,則必須完整完成範圍。 如果您在部署套件時移除套件範圍,則必須更新 package.json 檔案中的所有參考。 考慮到這一點,範疇可作為 上游來源的可行替代方案。