本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在中创建存储库后 CodeArtifact,可以使用 npm 客户端安装和发布软件包。使用存储库端点和授权令牌配置 npm 的推荐方法是使用 aws codeartifact login
命令。也可以手动配置 npm。
使用 login 命令配置 npm
使用 aws codeartifact login
命令提取用于 npm 的凭证。
注意
如果您要访问您拥有的域中的存储库,则无需包括 --domain-owner
。有关更多信息,请参阅 跨账户域。
重要
如果您使用的是 npm 10.x 或更高版本,则必须使用 2.9.5 或更高 AWS CLI 版本才能成功运行该命令。aws codeartifact login
aws codeartifact login --tool
npm
--domainmy_domain
--domain-owner111122223333
--repositorymy_repo
此命令对您的 ~/.npmrc 文件进行以下更改:
-
CodeArtifact 使用您的 AWS 凭证获取授权令牌后,添加授权令牌。
-
将 npm 注册表设置为通过
--repository
选项指定的存储库。 -
对于 npm 6 及更低版本:添加
"always-auth=true"
,为每个 npm 命令发送授权令牌。
调用 login
后的默认授权期为 12 小时,且必须调用 login
来定期刷新令牌。有关使用 login
命令创建的授权令牌的更多信息,请参阅 使用 login 命令创建的令牌。
不使用 login 命令配置 npm
你可以通过手动更新 npm 配置,在不使用aws codeartifact login
命令的情况下使用 CodeArtifact 存储库配置 npm。
不使用 login 命令配置 npm
在命令行中,获取 CodeArtifact 授权令牌并将其存储在环境变量中。npm 将使用此令牌对您的存储库进行身份验证。 CodeArtifact
注意
以下命令适用于 macOS 或 Linux 计算机。有关在 Windows 计算机上配置环境变量的信息,请参阅使用环境变量传递身份验证令牌。
CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain
my_domain
--domain-owner111122223333
--query authorizationToken --output text`运行以下命令获取 CodeArtifact 仓库的终端节点。您的存储库端点用于将 npm 指向您的存储库来安装或发布程序包。
my_domain
用您的 CodeArtifact 域名替换。111122223333
替换为域名所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库,则无需包括--domain-owner
。有关更多信息,请参阅 跨账户域。my_repo
替换为您的 CodeArtifact 存储库名称。
aws codeartifact get-repository-endpoint --domain
my_domain
--domain-owner111122223333
--repositorymy_repo
--format npm以下 URL 是一个示例存储库端点。
https://
my_domain
-111122223333.d.codeartifact.us-west-2
.amazonaws.com/npm/my_repo
/重要
注册 URL 必须以正斜杠 (/) 结尾。否则,您无法连接到存储库。
使用
npm config set
命令为您的 CodeArtifact 存储库设置注册表。将 URL 替换为上一步中的存储库端点 URL。npm config set registry=https://
my_domain
-111122223333
.d.codeartifact.region
.amazonaws.com/npm/my_repo
/注意
要使用双堆栈端点,请使用该
codeartifact.
端点。region
.on.aws使用
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,即使对于
GET
请求也是如此,请将always-auth
配置变量设置为。npm config set
npm config set //
my_domain
-111122223333
.d.codeartifact.region
.amazonaws.com/npm/my_repo
/:always-auth=true
示例 npm 配置文件 (.npmrc
)
以下是按照上述说明设置 CodeArtifact 注册表端点、添加身份验证令牌和配置后的示例.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 身份验证和授权
调用 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 安装时间长,这会导致构建时间过长。这种行为的实例将以进度条的形式出现,显示达几分钟。
要避免此问题,请在 npm
cli 命令中使用 --no-progress
或 progress=false
标志,如以下示例所示。
npm install lodash --no-progress