![](/img/trans.png)
[英]Get npm error npm ERR! 404 '@my-package@2.0.0' is not in this registry when try to publish new npm package version to npm
[英]npm publish for a package to AWS CodeArtifact repo fails with error "The provided package is configured to block new version publishes."
我創建了一個 AWS CodeArtifact 存儲庫,其中包含與 npmjs.com 的上游連接。 在安裝了 lodash 包的最新公開版本 ( 4.17.21
) 后,我嘗試將自修補版本發布到存儲庫 ( 4.17.50
)。 當我這樣做時,我收到以下錯誤:
npm ERR! 400 Bad Request - PUT https://amazon-{redacted}.d.codeartifact.us-west-2.amazonaws.com/npm/test-repository/lodash - The provided package is configured to block new version publishes.
提供的包配置為阻止新版本發布
什么會導致此操作被阻止? 過去類似的發布已經成功,最近有什么變化嗎?
CodeArtifact 最近發布了一個名為Package Origin Control (POC)的功能,以幫助避免公共(例如來自 npmjs.com)和私有包版本的意外混合。
此功能允許存儲庫所有者通過阻止發布新版本和/或將上游版本下載到存儲庫中來阻止包的新版本如何獲取到存儲庫中。 這可以幫助用戶防止“依賴替換”攻擊,在這種攻擊中,僅用於內部的包的包版本被惡意行為者發布到公共存儲庫,以欺騙構建系統無意中使用惡意外部版本。 . 關於該主題的博客文章: https ://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610。
CodeArtifact 存儲庫中的每個包現在都有兩個源控制標志publish
和upstream
。 每個都可以設置為ALLOW
或BLOCK
。 publish
標志控制是否可以將包的新版本發布到存儲庫中, upstream
標志控制是否可以通過上游存儲庫獲得上游存儲庫中存在但尚未保留在存儲庫中的包的新版本。
如果一個包由於從上游下載而首先進入存儲庫,則該包的publish
標志設置為BLOCK
。 這就是有問題的包裹所發生的事情。 如果您希望有意混合公共包和私有包,則需要將包的publish
標志設置為ALLOW
。 您可以在 AWS 控制台的 CodeArtifact 包詳細信息頁面(存儲庫列表 -> 存儲庫視圖 -> 包視圖 -> 源控制部分)中執行此操作,也可以通過 AWS CLI 通過調用put-package-origin-configuration來執行此操作,如下所示:
aws codeartifact put-package-origin-configuration --domain test-domain
--repository test-repository --format npm --package lodash
--restrictions publish=ALLOW,upstream=BLOCK
注意:正如所寫,此命令將允許發布成功,但會阻止將其他公共版本的lodash
從 npmjs.com 拉入存儲庫。 雖然可以將限制設置為publish=ALLOW,upstream=ALLOW
,但最安全的配置將始終反轉public
/ upstream
標志以防止混合公共和私有版本。 如果您想發布公共包的修補版本,也可以臨時設置限制,然后返回阻止未來的發布。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.