Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
Npm スコープは、関連するパッケージをグループに分類する手段として機能します。 これらのスコープを使用すると、競合が発生することなく、異なるユーザーによって作成されたものと同じ名前のパッケージを作成できます。 スコープを使用すると、 スコープ プレフィックス @scopeName を追加し、その特定のスコープでフィードを排他的に使用するように .npmrc ファイルを構成することで、パブリック パッケージとプライベート パッケージを分離できます。
Azure Artifacts には、スコープ付きパッケージとスコープなしパッケージの両方をフィードまたはパブリック レジストリから発行およびダウンロードする機能が用意されています。 Npm スコープは、インターネット にアクセスできないセルフホステッド オンプレミス サーバーを操作する場合に特に価値があります。このようなシナリオではアップストリーム ソースを構成することは不可能です。 要約すると、スコープを使用する場合:
- 名前の競合について心配する必要はありません。
- パッケージをインストールまたは発行するために npm レジストリを変更する必要はありません。
- 各 npm 組織/ユーザーは独自のスコープを持ち、所有者またはスコープ メンバーのみが自分のスコープにパッケージを発行できます。
プロジェクトの設定
Azure DevOps 組織にサインインしてから、プロジェクトに移動します。
Artifacts を選択し、次に フィードに接続 を選択します。
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
個人用アクセス トークンをPackaging>読み取りおよび書き込みスコープで生成します。
次のコマンドを実行して、新しく生成された個人用アクセス トークンをエンコードします。 メッセージが表示されたら、個人用アクセス トークンを貼り付け、結果の 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 個人用アクセス トークン (AT) の長さは 82 文字です。 一部のツールでは、Base64 にトークンをエンコードするときに自動改行が挿入される場合があります。 これを回避するには、
-w0コマンドで フラグを使用して、出力が 1 行に残っていることを確認します。 このチュートリアルでは、既定で単一行の Base64 文字列を生成する Node の Buffer メソッドを使用します。.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 ファイル内のすべての参照を更新する必要があります。 そのことを念頭に置いて、スコープは アップストリーム ソースの実行可能な代替手段として機能できます。
関連資料
- npm audit を実行する
- npm パッケージ (YAML/クラシック) を発行する
- npmjs.com のパッケージを使用する