npm スコープを使用して Azure Artifact 内のパッケージを管理する

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022

npm スコープは、関連するパッケージをグループに分類するのに役立ちます。 競合のない他のユーザーによって作成されたパッケージと同じ名前のパッケージを作成できます。 スコープを使用すると、スコープ プレフィックス @scopeName を追加し、そのスコープでフィードを使用するように .npmrc ファイルを構成することで、パブリック パッケージとプライベート パッケージを分離できます。

Azure Artifactsでは、フィードまたはパブリック レジストリからのスコープ付きパッケージとスコープなしパッケージの両方の発行とダウンロードがサポートされています。 npm スコープは、インターネットにアクセスできないセルフホステッド オンプレミス サーバーを操作する場合に特に便利です。これらのシナリオでアップストリーム ソースを構成することは不可能であるためです。 要約すると、スコープを使用する場合:

  • 名前の競合について心配する必要はありません。
  • パッケージをインストールまたは発行するために npm レジストリを変更する必要はありません。
  • 各 npm 組織またはユーザーには独自のスコープがあり、そのスコープにパッケージを発行できるのは所有者またはスコープ メンバーだけです。

Prerequisites

製品 必要条件
Azure DevOps - Azure DevOps 組織です。
- Azure DevOps プロジェクト
- Azure Artifacts フィード
- Node.js と npm をダウンロードしてインストールします。

フィードに接続する

npm スコープを構成する前に、プロジェクトを Azure Artifacts フィードに接続します。 前提条件を満たしてフィードを作成したことを確認し、次の手順に従います。

Azure Artifactsでは、2 つの個別の .npmrc ファイルを使用することをお勧めします。 資格情報を格納する 1 つのファイルをユーザー ディレクトリに保持し、2 つ目のファイルを package.json ファイルと同じディレクトリに保持してフィード固有の構成を格納します。

  1. Azure DevOpsにサインインし、プロジェクトに移動します。

  2. [Artifacts] を選択し、ドロップダウン メニューからフィードを選択します。

  3. [ フィードに接続] を選択し、左側のナビゲーション ウィンドウから npm を選択します。

  4. npm で Azure Artifacts を初めて使用する場合は、[ツールの取得] を選択し、指示に従ってオペレーティング システムの前提条件をインストールします。 まず 、Node.jsnpm をインストールする必要があります。 次に、オペレーティング システムに応じて、Windowsの vsts-npm-auth をインストールするか、Windows以外の環境の資格情報を構成します。 Windows以外のガイダンスについては、「フィードへの接続 - その他」を参照してください。

  5. package.json ファイルと同じディレクトリに .npmrc ファイルを作成し、Project setup セクションのスニペットをそのファイルに貼り付けます。

  6. Windowsで、次のコマンドを実行して、ユーザー レベルの .npmrc ファイルにAzure Artifacts トークンを追加します。 毎回このコマンドを実行する必要はありません。 トークンの有効期限が切れると、npm は 401 Unauthorized エラーを返して、更新のタイミングであることを示します。

vsts-npm-auth -config .npmrc

vsts-npm-authは、Azure DevOps Serverではサポートされていません。 Windows以外のガイダンスについては、「フィードへの接続 - その他」を参照してください。

スコープの設定

Azure Artifactsでスコープを使用するには、発行またはインストールするスコープパッケージがフィードを通じて解決されるように、プロジェクトの .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"
    }
    

  • .npmrc ファイル:

    @local:registry=https://pkgs.dev.azure.com/FabrikamOrg/NpmDemo/_packaging/FabrikamFeed/npm/registry/
    
    always-auth=true
    
  • package.json ファイル:

    {
      "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

上流源と対象範囲

アップストリーム ソースは、最も柔軟性を提供します。 アップストリーム ソースを使用すると、Azure Artifacts フィードからスコープ付きパッケージとスコープなしパッケージの両方を使用できます。また、npmjs.com などのパブリック レジストリのパッケージも使用できます。 この方法は、1 つのフィードが内部パッケージと承認済みの外部依存関係の両方のメイン ソースとして機能する場合に適しています。

スコープは制限が厳しくなっていますが、適切なシナリオでは実用的なオプションです。 スコープを使用する場合、各パッケージ名は @<scope> で始まる必要があります。つまり、パッケージ全体でその名前付け規則を採用して保持する必要があります。 たとえば、パッケージを @local/my-packageとして発行する場合は、パッケージが参照されている任意の場所でそのスコープ付き名前を引き続き使用する必要があります。

この要件により、オーバーヘッドが増える可能性があります。特に、同じパッケージを後でパブリック レジストリに発行する予定の場合です。 パッケージの展開時にスコープを削除する場合は、 package.json ファイルおよび依存プロジェクト内の対応する参照も更新する必要があります。

これらの制限がある場合でも、アップストリーム ソースが実用的でない場合は、スコープが実行可能な代替手段として機能する可能性があります。 これは特に、パブリック レジストリへのアクセスが利用できない分離またはセルフホステッド環境で当てはまります。また、フィード内でパッケージを整理したまま、パッケージ名の競合を回避する必要があります。