VSTS 软件包提要:配置客户端以使用 vsts 提要后无法安装公共 npm 软件包

Posted

技术标签:

【中文标题】VSTS 软件包提要:配置客户端以使用 vsts 提要后无法安装公共 npm 软件包【英文标题】:VSTS package feed: Cannot install public npm packages after configuring client to work with vsts feed 【发布时间】:2018-04-02 21:36:43 【问题描述】:

我创建了一个 .npmrc 文件,将我配置为使用 VSTS pacakge 提要,但我的所有公共依赖项都不会安装(你知道,react,lodash ...)

似乎一旦我将 .npmrc 文件配置为指向我的私人提要,所有公共包都不再可访问。

因为与 Nuget 不同,npm 不支持多个包注册表(这里有一个相关的SA question),所以我目前坚持运行 npm install 两次——一次没有和 .npmrc 文件来获取公共依赖项,一次使用 .npmrc 文件获取私有文件。

VSTS 不镜像/代理公共注册表吗?如果不是 - 我是否应该使用 .npmrc 文件的 2 个不同版本运行 npm install 两次?

【问题讨论】:

开启上游源后问题解决了吗? @starain-MSFT 我实际上是通过设置私有包的范围来解决这个问题的(即,我的私有包的包名称类似于@scope/package。然后我将我的 .npmrc 配置为指向vsts 包供稿仅适用于我的@scope。因此公共包将转到 npmhs,而我的包将转到我的私人 vsts 供稿。 【参考方案1】:

我对私有 npm 提要没有管理员权限。此外,vsts-npm-auth 仅适用于 windows。

但是,我使用的私有包是有范围的。 package.json 中的依赖项如下所示:


  ...
 "dependencies": 
  "@scope-name/package-name": "^1.0.1",
  ...
 

将作用域注册表添加到 .npmrc 对我有用。

@scope-name:registry=https://npm.package.feed.com/registry

【讨论】:

【参考方案2】:

处理它的简单方法是为您的 Feed 启用上游来源。在此之后,如果包不存在于您的提要中,它将查找包形式 npmjs.com。

Use packages from npmjs.com

另一种方式是可以在命令中指定注册表,例如:npm install -g vsts-npm-auth --registry https://registry.npmjs.com --always-auth false

另一方面,我们可以将提要添加到项目的 .npmrc 文件中,而不是在用户文件夹 (c:\Users[username]) 中,然后如果当前上下文在其他路径中,它会使用公共注册表。

【讨论】:

上游来源是正确的方法。在最后一段中,npm 不能以这种方式工作。来自docs.npmjs.com/files/npmrc,“每个 [.npmrc] 都已加载,配置选项按优先级顺序解析。例如,userconfig 文件中的设置将覆盖 globalconfig 文件中的设置。”这与 NuGet 不同,后者确实结合了它发现的多个 NuGet.config 文件。 @Alex 如果您从没有 .npmrc 文件的其他文件夹运行 npm 命令,它只使用全局配置文件。

以上是关于VSTS 软件包提要:配置客户端以使用 vsts 提要后无法安装公共 npm 软件包的主要内容,如果未能解决你的问题,请参考以下文章

在VSTS中缓存npm install任务

[2018-05-27]配置VSTS认证方式使用Personal Access Token

在VSTS上配置Nuget包以进行预发布

如何完全清空或删除VSTS包裹Feed?

将 VSTS 包源添加到 NuGet 包资源管理器

如何将 VSTS 上的构建配置为 FTP 部署