我注册了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'
}
有什么主意吗?
答案 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
+ .yarnrc
或npm login
+ .npmrc
(您仍然可以使用yarn来管理软件包两种情况下
答案 1 :(得分:3)
我刚遇到类似情况。看来yarn
只是在主要的Yarn软件包注册表中寻找我组织的私有软件包。我已经从GitHub的Packages文档中复制了示例,用于将.npmrc
文件直接构造到项目中的.yarnrc
文件中,该文件将消耗该应用程序,但不知道格式是不同的(我从来没有来处理.yarnrc
个文件)。
但是,将.yarnrc
文件更新为您上面提到的正确格式(在谷歌搜索中也发现过)之后,yarn
成功地找到了私有软件包并正确安装了它。
请注意,我的yarn
版本: 1.17.3
cd
进入项目nvm use
(如果要使用特定的节点版本).yarnrc
文件添加到项目中。请参阅下面的外观。 package.json
npm login --registry=https://npm.pkg.github.com --scope=@MyOrg
yarn
对我有用。
"@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。我一更改注册表网址->找不到软件包。