如何解决npm 可以用于私有包的 AWS CodeArtifact,而所有 npm.org 都用于公共包吗?
docs 读起来有点像开发人员应该将所有“包注册职责”交给 AWS CodeArtifact。但是我想继续使用 npm.org 来处理一些包。
给定一个使用私有和公共包的 javascript 应用程序,我可以这样设置 npm/AWS:
解决方法
我也对此感到困惑,但经过大量阅读后,aws codeartifact 希望您对公共包进行一对一映射。这意味着如果您想要来自公共 npm 存储库的 lodash,您需要将它添加到您的 codeartifact 存储库中。幸运的是,aws 让这一切变得简单,有 2 个解决方案可以实现这一点
解决方案 1:
在您的代码工件存储库上设置一个上游到 npm 注册表。
这将自动创建一个名为“npm-store”的代码工件存储库,当您从 package.json npm install 公共包(当然是登录后)时,它会添加尚未添加的包 安装在“npm-store”上,然后您的 codeartifact 存储库(您将 npm-store 上传到的那个)将从那里下载它,然后将在您的构建中使用。 您还可以设置另一个上游以在同一个存储库上说 pypi。会以同样的方式工作
解决方案 2:
使用 associate-external-connection
- 每个代码工件存储库只能有一个外部连接。您要做的是创建一个代码工件存储库,将其命名为“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”上传到的各种存储库将下载这些包
,有一种方法可以显式设置两个 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
(more info) 的解构,区别在于不是在您的 registry
文件中设置通用的 .npmrc
(用于设置您的 npm) 将设置一个范围的注册表 (more info)。
通过这种方式,您将能够从您想要的来源获取您的包裹。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。