纱线找不到私有的Github NPM注册表

时间:2019-10-10 05:41:47

标签: github npm yarnpkg

我注册了Github私有npm注册表beta,并按照他们的指示进行操作:https://github.com/features/package-registry

与npm配合使用效果很好,但我更喜欢使用yarn。尽管npm找不到已注册的程序包,但是yarn根本找不到它。

yarn add @omniphx/adminite-adminite-ui-components输出:

yarn add v1.19.0
info No lockfile found.
warning package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in order to avoid resolution inconsistencies caused by unsynchronized lock files. To clear this warning, remove package-lock.json.
[1/4] ?  Resolving packages...
error Couldn't find package "@omniphx/adminite-ui-components" on the "npm" registry.
info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.

在阅读了关于纱线的私人仓库后,我认为窍门是由于纱线的rc格式略有不同。不幸的是,这也不起作用,并且yarn仍然找不到私有注册表。

.npmrc

registry=https://registry.npmjs.org
@omniphx:registry=https://npm.pkg.github.com/omniphx

.yarnrc

registry "https://registry.npmjs.org"
"@omniphx:registry" "https://npm.pkg.github.com/omniphx"

还确认我的github令牌也设置了yarn config list

yarn config v1.19.0
info yarn config
{
  'version-tag-prefix': 'v',
  'version-git-tag': true,
  'version-commit-hooks': true,
  'version-git-sign': false,
  'version-git-message': 'v%s',
  'init-version': '1.0.0',
  'init-license': 'MIT',
  'save-prefix': '^',
  'bin-links': true,
  'ignore-scripts': false,
  'ignore-optional': false,
  registry: 'https://registry.npmjs.org',
  'strict-ssl': true,
  'user-agent': 'yarn/1.19.0 npm/? node/v12.11.1 darwin x64',
  email: 'mattjmitchener@gmail.com',
  lastUpdateCheck: 1570679687836,
  username: 'omniphx',
  '@omniphx:registry': 'https://npm.pkg.github.com/omniphx'
}
info npm config
{
  '//npm.pkg.github.com/:_authToken': 'fake12345',
  registry: 'https://registry.npmjs.org',
  '@omniphx:registry': 'https://npm.pkg.github.com/omniphx',
  python: '/usr/bin/python'
}

有什么主意吗?

3 个答案:

答案 0 :(得分:4)

我遇到的问题略有不同。

尝试了约翰建议的内容后,我仍然无法使用yarn添加私有注册表包(但对于npm则完全可以)

然后我意识到两件事:

对于GitHub软件包,npm可以使用

registry=https://npm.pkg.github.com/my-org

@my-org:registry=https://npm.pkg.github.com

,但是yarn仅允许使用后一种语法。

Github网站上的文档仅显示了可能对纱线使用者造成问题的第一种语法。

另一件事是,如果您npm login进入私有注册表,但在项目中使用了.yarnrc文件,则yarn无法真正将您的npm凭据与其混合使用。尽管在不同的环境下它的表现似乎有所不同。

但是,最好坚持使用yarn login + .yarnrcnpm login + .npmrc(您仍然可以使用yarn来管理软件包两种情况下

答案 1 :(得分:3)

我刚遇到类似情况。看来yarn只是在主要的Yarn软件包注册表中寻找我组织的私有软件包。我已经从GitHub的Packages文档中复制了示例,用于将.npmrc文件直接构造到项目中的.yarnrc文件中,该文件将消耗该应用程序,但不知道格式是不同的(我从来没有来处理.yarnrc个文件)。

但是,将.yarnrc文件更新为您上面提到的正确格式(在谷歌搜索中也发现过)之后,yarn成功地找到了私有软件包并正确安装了它。

请注意,我的yarn版本: 1.17.3

我采取的步骤

  1. 开始新的终端会话
  2. cd进入项目
  3. nvm use(如果要使用特定的节点版本)
  4. 将格式正确的.yarnrc文件添加到项目中。请参阅下面的外观。
  5. 为我的私有软件包手动将软件包和版本范围添加到package.json
  6. 运行npm login --registry=https://npm.pkg.github.com --scope=@MyOrg
    • 请参阅以下有关scope / org gotcha's的注释
  7. 运行yarn

对我有用。

.yarnrc

"@myorg:registry" "https://npm.pkg.github.com"

注释:有关组织/范围名称陷阱的注释,请参见下文

其他说明

我知道,鉴于上述GH用户名/范围,您似乎对此没有任何问题,但是对于此处出现的其他任何人,GH的文档在映射用户名/方面都很少组织名称到包名称中的范围。只要记住这些小陷阱就可以了:

  • 软件包名称必须始终限制在您的组织(或用户名)范围内
    • 例如name: @johndturn/my-package
  • 如果您的组织中有大写字母,例如MyOrg,只需用package.json .yarnrc中的软件包名称替换它们小写
    • 例如name: @myorg/my-package
    • 注意:在通过npm login进行身份验证时,我仍然将大写字母保留在--scope=参数中。
  • 您的包裹名称不必与仓库相同。
    • 例如,对于名为MyOrg/random-prefix.js-lib的存储库,您可以在name: @myorg/js-lib文件中包含package.json,用于项目本身。然后,将其安装在其他项目中将类似于@myorg/js-lib: 1.0.0

答案 2 :(得分:1)

我不是npm / yarn的专家,所以我可能会误解这里发生的事情,但是我认为npm注册表中的程序包代理还不能与yarn一起使用。这可能有关吗?当软件包代理发布给npm时,我记得曾在Twitter上阅读过用yarn尝试过该方法的人的评论,但该方法无效。

在这里找到Twitter线程: https://twitter.com/github/status/1171832034580451328

  

它不适用于Yarn。我一更改注册表网址->找不到软件包。