2

文档读起来有点像开发人员应该将所有包注册职责”交给AWS CodeArtifact。但我想继续为某些包使用 npm.org。

给定一个使用私有和公共包的 javascript 应用程序,我可以这样设置 npm/AWS:

  • 私有范围的包(我的代码)是从 AWS CodeArtifact 中提取的,并且
  • 公开范围的包(例如 lodash)被拉到 npm.org?
4

2 回答 2

2

我也对此感到困惑,但经过大量阅读,aws codeartifact 希望您对公共包进行一对一的映射。这意味着如果你想从公共 npm 存储库中获取 lodash,你需要将它添加到你的 codeartifact 存储库中。幸运的是,aws 让这一切变得简单,有 2 种解决方案可以做到这一点

解决方案1:

在您的 codeartifact 存储库上设置一个上游到 npm 注册表。

在控制台中

这将自动创建一个名为“npm-store”的 codeartifact 存储库,当您从 package.json 安装公共软件包(当然是在登录后)时,它将添加尚未安装在“npm-store”上的软件包,然后是您的 codeartifact存储库(您将 npm-store 上传到的那个)将从那里下载它,然后将在您的构建中使用它。您还可以设置另一个上游来在同一个存储库上说 pypi。将以同样的方式工作

解决方案2:

使用associate-external-connection- 每个 codeartifact 存储库只能有一个外部连接。您所做的是创建一个 codeartifact 存储库,我们将其命名为“my-external-repo”。现在我可能是错的,但我在 UI 中看不到任何设置它的地方,但如果您使用的是 aws cli,您可以运行类似于此的命令

aws codeartifact associate-external-connection \ --domain "my-org" --domain-owner "account-id" \ --repository "my-external-repo" --external-connection public:npmjs

然后将“my-external-repo”设置为将使用公共 npm 包的 codeartifact 存储库的上游。现在,当您 npm install(当然是在登录后)时,将添加不在“my-external-repo”上的公共包,然后您将“my-external-repo”上传到的各个存储库将下载这些包

于 2021-02-25T05:45:09.263 回答
1

有办法显式设置两个 npm 注册表,从而实现您想要的。aws codeartifact login --tool npm --repository my-repo --domain my-domain您应该使用更精细的方法,而不是使用登录到 aws,而是使用以下命令:

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

# set a scoped registry
npm config set registry endpoint --scope=@my-package

# get token
token = aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --repository my_repo

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

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

这些命令是aws codeartifact login --tool npm --repository my-repo --domain my-domain更多信息)的解构,不同之处在于不是registry在您的.npmrc文件中设置常规(用于为您的 npm 设置配置)而是设置范围注册表更多信息)。通过这种方式,您将能够从您想要的来源获取您的包。

于 2021-03-12T14:53:46.090 回答