尝试使用私有(private) npm 注册表为我工作的地方设置概念验证,以限制开发人员可以下载的软件包。我在 Azure Artifacts 上设置了一个 feed,并将官方 npm 注册表 ( https://registry.npmjs.org ) 设置为唯一的上游源。该提要被设置为 npmrc 文件中的注册表,并且该项目正确地将其识别为注册表源。 (根据npm config getregistry
)。
当用户(具有从上游安装的权限)尝试从空源安装软件包时,它会正确安装该软件包(从上游)及其所有依赖项。它还将包保存到 Artifacts feed,但仅将其部分依赖项保存到 feed。它保存的依赖项似乎没有任何韵律或理由,因为几乎每次我安装同一个包时它都会改变。
当无权从上游源安装的用户尝试安装相同的软件包时,它会在未保存的依赖项之一上失败,从而为工件提要提供 404 错误,表明该软件包在注册表中找不到。
我设置了相当多不同的提要,包括项目范围的和组织范围的,以查看我是否可能摆弄了错误的设置/设置了错误的内容,但我设置的每个提要都得到了相同的行为.
是否存在确定是否下载依赖项的特定标准,以及是否有一种方法可以使我在从上游安装包时将所有依赖项保存到源中?
最佳答案
Are there certain criteria that determine whether or not a dependency is downloaded
npm
有 local cache 。在测试之前,您需要运行npm cache clean
。否则,无法保证包会被下载。它可以从缓存安装。
and is there a way that I can make it so all dependencies are saved to the feed when a package is installed from the upstream?
我想您可以尝试禁用缓存,但这可能会大大增加用户的安装时间。您可能只想在测试时这样做。也就是说,有各种有点古怪的方法可以更持久地做到这一点。您可以使用 force
config option但这还有其他副作用。我想你可以将缓存设置为 /dev/null
或类似的东西,尽管我从未尝试过。在"Disable npm cache"提供的答案中还有其他想法。 Stackoverflow 问题。
关于azure - npm Azure Artifacts feed 不会安装来自上游源的所有依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65236346/