配置和使用 npm CodeArtifact - CodeArtifact

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

配置和使用 npm CodeArtifact

在中建立儲存庫之後 CodeArtifact,您可以使用 npm 用戶端來安裝和發佈套件。使用存儲庫端點和授權令牌配置 npm 的推薦方法是使用aws codeartifact login命令。您也可以手動配置 npm。

使用登錄命令配置 npm

使用該aws codeartifact login命令獲取憑據以與 npm 一起使用。

注意

如果您正在訪問您擁有的域中的存儲庫,則不需要包含--domain-owner。如需詳細資訊,請參閱 跨帳戶網域

重要

如果您使用 npm 10.x 或更新版本,則必須使用 2.9.5 或更新 AWS CLI 版本才能成功執行命令。aws codeartifact login

aws codeartifact login --tool npm --domain my_domain --domain-owner 111122223333 --repository my_repo

這個命令會對 ~/.npmrc 檔案進行下列變更:

  • 從 CodeArtifact 使用 AWS 憑據獲取後添加授權令牌。

  • 將 npm 註冊表設置為由--repository選項指定的存儲庫。

  • 對於 npm 6 及更低版本:添加"always-auth=true"以便為每個 npm 命令發送授權令牌。

呼叫後的預設授權期間login為 12 小時,login必須呼叫以定期重新整理權杖。如需有關使用login指令建立之授權權杖的詳細資訊,請參閱使用login指令建立的權杖

在不使用登錄命令的情況下配置 npm

您可以通過手動更新 npm 配置來使用 CodeArtifact 存儲庫配置 npm,而無需使用aws codeartifact login命令。

在不使用登錄命令的情況下配置 npm
  1. 在命令行中,獲取 CodeArtifact 授權令牌並將其存儲在環境變量中。npm 將使用此令牌與您的存儲庫進行身份驗證。 CodeArtifact

    注意

    以下指令適用於 macOS 或 Linux 電腦。如需在 Windows 電腦上設定環境變數的資訊,請參閱使用環境變量傳遞身份驗證令牌

    CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text`
  2. 通過運行以下命令獲取 CodeArtifact 存儲庫的端點。您的存儲庫端點用於將 npm 指向存儲庫以安裝或發布包。

    • 使用您的網域名稱取代我的網 CodeArtifact 域名稱。

    • 以網域擁有者的 AWS 帳號識別碼取代 111122223333。如果您正在訪問您擁有的域中的存儲庫,則不需要包含--domain-owner。如需詳細資訊,請參閱 跨帳戶網域

    • 用您的 CodeArtifact 存儲庫名稱替換 my_repo

    aws codeartifact get-repository-endpoint --domain my_domain --domain-owner 111122223333 --repository my_repo --format npm

    以下 URL 是存放庫端點範例。

    https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/
    重要

    登錄 URL 必須以正斜線 (/) 結尾。否則,您無法連接到存放庫。

  3. 使用命npm config set令將註冊表設置為您的 CodeArtifact 存儲庫。將 URL 取代為上一個步驟中的存放庫端點 URL。

    npm config set registry=https://my_domain-111122223333.d.codeartifact.region.amazonaws.com/npm/my_repo/
  4. 使用該npm config set命令將授權令牌添加到 npm 配置中。

    npm config set //my_domain-111122223333.d.codeartifact.region.amazonaws.com/npm/my_repo/:_authToken=$CODEARTIFACT_AUTH_TOKEN

    對於 npm 6 或更低版本:要使 npm 始終將 CodeArtifact auth 令牌傳遞給甚至對於GET請求,請使用npm config set. always-auth

    npm config set //my_domain-111122223333.d.codeartifact.region.amazonaws.com/npm/my_repo/:always-auth=true

實例 npm 配置文件(.npmrc

以下是遵循上述指示設定 CodeArtifact 登錄端點、新增驗證 Token 並進行設定之後的範例.npmrc檔案always-auth

registry=https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my-cli-repo/ //my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/:_authToken=eyJ2ZX... //my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/:always-auth=true

運行 npm 命令

設定 npm 用戶端之後,您可以執行 npm 命令。假設軟件包存在於您的存儲庫或其上游存儲庫之一中,則可以使用npm install. 例如,使用下列指令來安裝lodash套件。

npm install lodash

使用以下命令將新的 npm 包發佈到 CodeArtifact 存儲庫。

npm publish

如需如何建立 npm 套件的詳細資訊,請參閱 npm 文件網站上的建立 Node.js 模組。如需支援的 npm 命令清單 CodeArtifact,請參閱 npm 命令 Support

驗證 npm 身份驗證和授權

調用npm ping命令是驗證以下內容的一種方法:

  • 您已正確設定認證,以便對 CodeArtifact 儲存庫進行驗證。

  • 授權配置授予您ReadFromRepository權限。

成功叫用的輸出如npm ping下所示。

$ npm -d ping npm info it worked if it ends with ok npm info using npm@6.4.1 npm info using node@v9.5.0 npm info attempt registry request try #1 at 4:30:59 PM npm http request GET https://<domain>.d.codeartifact.us-west-2.amazonaws.com/npm/shared/-/ping?write=true npm http 200 https:///npm/shared/-/ping?write=true Ping success: {} npm timing npm Completed in 716ms npm info ok

-d選項會使 npm 打印其他調試信息,包括存儲庫 URL。此信息可以很容易地確認 npm 配置為使用您期望的存儲庫。

更改回默認的 npm 註冊表

使用配置 npm 將 npm 註冊表 CodeArtifact 設置為指定的 CodeArtifact 存儲庫。連接完成後,您可以運行以下命令將 npm 註冊表設置回其默認註冊表 CodeArtifact。

npm config set registry https://registry.npmjs.com/

故障排除 npm 8.x 或更高版本的緩慢安裝

npm 8.x 版本及更新版本中存在一個已知問題,如果對套件儲存庫發出請求,且儲存庫會將用戶端重新導向至 Amazon S3,而不是直接串流資產,則 npm 用戶端可能會掛起每個相依性數分鐘。

由於 CodeArtifact 儲存庫的設計一律會將請求重新導向至 Amazon S3,因此有時會發生此問題,導致長時間的 npm 安裝時間造成建置時間。這種行為的實例將自己顯示為顯示幾分鐘的進度條。

若要避免此問題,請使用--no-progressprogress=false旗標搭配 npm cli 命令,如下列範例所示。

npm install lodash --no-progress