注意
这种包类型可能不适用于你的实例,因为站点管理员可以启用或禁用每种支持的包类型。 有关详细信息,请参阅“为企业配置包生态系统支持”。
已发布 npm 版本的限制
如果您向 GitHub Packages 发布了超过 1,000 个 npm 包版本,则在使用过程中可能会遇到性能问题和超时。
将来,为了提高服务的性能,你将无法发布 GitHub超过 1,000 个版本的包。 在达到此限制之前发布的任何版本仍将是可读的。
如果达到此限制,请考虑删除包版本或联系支持人员以获得帮助。 当此限制强制执行时,我们的文档将更新一种解决此限制的方法。 有关详细信息,请参阅 删除和恢复包 或 GitHub Packages 简介。
正在对GitHub Packages进行身份验证
注意
GitHub Packages 仅支持使用 personal access token (classic) 进行身份验证。 有关详细信息,请参阅“管理个人访问令牌”。
需要访问令牌才能发布、安装和删除专用、内部和公共包。
你可以使用 personal access token (classic) 向 GitHub Packages 或 GitHub API 进行身份验证。 创建 personal access token (classic) 时,可根据需要为令牌分配不同的作用域。 有关 personal access token (classic) 的包相关作用域的详细信息,请参阅 关于 GitHub Packages 的权限。
要在 GitHub Packages 工作流程内向 GitHub Actions 注册表验证,您可以使用:
GITHUB_TOKEN发布与工作流存储库相关联的包。- 范围至少为
read:packages的 personal access token (classic),用于安装与其他专用存储库关联的包(如果向存储库授予对包的读取访问权限,可以使用GITHUB_TOKEN。 请参阅 配置包的访问控制和可见性)。
使用personal access token进行身份验证
必须使用具有适当范围的 personal access token (classic) 才可在 GitHub Packages 中发布和安装包。 有关详细信息,请参阅“GitHub Packages 简介”。
您可以通过 npm 向 GitHub Packages 进行身份验证:一种方式是编辑每个用户的 ~/.npmrc 文件,使其包含您的 personal access token (classic);另一种方式是在命令行中使用您的用户名和 personal access token 登录 npm。
若要通过将你的 personal access token (classic) 添加到 ~/.npmrc 文件中进行身份验证,请编辑项目的 ~/.npmrc 文件,加入以下行,并将 HOSTNAME 替换为 你的 GitHub Enterprise Server 实例 的主机名,将 TOKEN 替换为你的 personal access token。 如果 ~/.npmrc 文件不存在,则创建一个新的。
如果实例启用了子域隔离:
//npm.HOSTNAME//:_authToken=TOKEN
如果实例禁用了子域隔离:
//HOSTNAME/_registry/npm/:_authToken=TOKEN
若要通过登录到 npm 进行身份验证,请使用 npm login 命令,将 USERNAME 替换为 GitHub 用户名、令牌替换为电子邮件地址 personal access token (classic),将 PUBLIC-EMAIL-ADDRESS 替换为电子邮件地址。
如果使用 npm CLI 版本 9 或更高版本,并且使用命令行登录或注销专用注册表,则应使用 --auth-type=legacy 选项从提示中读取身份验证详细信息,而不是通过浏览器使用默认登录流。 有关详细信息,请参阅 npm-login。
如果你在使用 npm 时并未将 GitHub Packages 设为默认包注册表,并且想要使用 npm audit 命令,我们建议你在向 GitHub Packages 进行身份验证时,将 --scope 标志与托管该包的命名空间一起使用(该命名空间可以是包所属的个人帐户或组织 )。
如果实例启用了子域隔离:
$ npm login --scope=@NAMESPACE --auth-type=legacy --registry=https://npm.HOSTNAME/
> Username: USERNAME
> Password: TOKEN
如果实例禁用了子域隔离:
$ npm login --scope=@NAMESPACE --auth-type=legacy --registry=https://HOSTNAME/_registry/npm/
> Username: USERNAME
> Password: TOKEN
发布包
注意
包名称和作用域只能使用小写字母。
默认情况下,您的软件包会发布到您在package.json文件的name字段中指定的GitHub仓库。 例如,你会将名为 @my-org/test 的包发布到 my-org/testGitHub 存储库。 您可以通过在 package.json 文件中包含 repository 字段,将多个包发布到同一个 GitHub 仓库。 有关详细信息,请参阅将多个包发布到同一仓库。
可以使用项目中的本地 .npmrc 文件或使用 publishConfig 中的 package.json 选项来设置项目的作用域映射。
GitHub Packages 仅支持带作用域的 npm 包。 作用域内包的名称格式为 @NAMESPACE/PACKAGE-NAME。 作用域内的包总是以 @ 符号开头。 可能需要更新 package.json 中的名称以使用作用域内的名称。 例如,如果你是用户 octocat,包名为 test,则分配区分范围的包名称,如下所示:"name": "@octocat/test"。
在发布包后,您可以在 GitHub 上查看该包。 有关详细信息,请参阅“查看包”。
使用本地 .npmrc 文件来发布包
可以使用 .npmrc 文件来配置项目的作用域映射。 在 .npmrc 文件中,使用 GitHub Packages URL 和帐户所有者,以便 GitHub Packages 知道在何处路由包请求。 使用 .npmrc 文件可防止其他开发人员意外将软件包发布到 npmjs.org,而不是 GitHub Packages。
- 向 GitHub Packages 验证。 有关详细信息,请参阅向 GitHub Packages 进行身份验证。
- 在与
package.json文件相同的目录中,创建或编辑.npmrc文件以包含指定 GitHub Packages URL 和托管包的命名空间的行。 将NAMESPACE替换为拥有包含你的项目的存储库的用户或组织帐户的名称。
如果启用了子域隔离:
@NAMESPACE:registry=https://npm.HOSTNAME
如果禁用了子域隔离:
@NAMESPACE:registry=https://HOSTNAME/_registry/npm
-
将 .npmrc 文件添加到 GitHub Packages 可在其中找到项目的存储库。 有关详细信息,请参阅“添加文件到仓库”。
-
验证项目的
package.json中包的名称。name字段必须包含包的作用域和名称。 例如,如果你的包名为“test”,并且你要将其发布到“My-org” GitHub 组织,那么你在package.json中的name字段应为@my-org/test。 -
验证项目
package.json中的repository字段。repository字段必须与 GitHub 存储库的 URL 匹配。 例如,如果存储库 URL 是github.com/my-org/test,则存储库字段应为https://github.com/my-org/test.git。 -
发布包:
npm publish
使用 publishConfig 文件中的 package.json 发布包
可以使用 publishConfig 文件中的 package.json 元素来指定要发布包的注册表。 有关详细信息,请参阅 npm 文档中的 publishConfig。
-
编辑您的程序包的
package.json文件,并添加一个publishConfig条目。如果实例启用了子域隔离:
"publishConfig": { "registry": "https://npm. HOSTNAME/" },如果实例禁用了子域隔离:
"publishConfig": { "registry": "https://HOSTNAME/_registry/npm/" }, -
验证项目
package.json中的repository字段。repository字段必须与 GitHub 存储库的 URL 匹配。 例如,如果存储库 URL 是github.com/my-org/test,则存储库字段应为https://github.com/my-org/test.git。 -
发布包:
npm publish
将多个包发布到同一个仓库
若要发布多个包同一存储库,可以在每个包的文件字段中包含存储库GitHub的 repository``package.json URL。 有关详细信息,请参阅 npm 文档中的创建 package.json 文件和创建 Node.js 模块。
若要确保存储库的 URL 正确,请替换为 REPOSITORY 包含要发布的包的存储库的名称,以及 OWNER 拥有存储库的个人帐户或组织 GitHub 的名称。
GitHub Packages 将基于 URL 而不是基于包名称匹配存储库。
"repository":"https://HOSTNAME/OWNER/REPOSITORY",
安装软件包
您可以通过将这些包作为依赖项添加到项目的 package.json 文件中,从 GitHub Packages 安装包。 有关在项目中使用 package.json 的详细信息,请参阅 npm 文档中的使用 package.json。
默认情况下,您可以从一个组织添加包。 有关详细信息,请参阅从其他组织安装包。
还需要将 .npmrc 文件添加到项目,以便安装包的所有请求都经过 GitHub Packages。 当您通过 GitHub Packages 路由所有软件包请求时,您可以同时使用来自 npmjs.org 的作用域包和非作用域包。有关详细信息,请参阅 npm 文档中的 npm-scope。
- 向 GitHub Packages 验证。 有关详细信息,请参阅向 GitHub Packages 进行身份验证。
- 在与
package.json文件相同的目录中,创建或编辑.npmrc文件以包含指定 GitHub Packages URL 和托管包的命名空间的行。 将NAMESPACE替换为拥有包含你的项目的存储库的用户或组织帐户的名称。
如果启用了子域隔离:
@NAMESPACE:registry=https://npm.HOSTNAME
如果禁用了子域隔离:
@NAMESPACE:registry=https://HOSTNAME/_registry/npm
-
将 .npmrc 文件添加到 GitHub Packages 可在其中找到项目的存储库。 有关详细信息,请参阅“添加文件到仓库”。
-
在项目中配置
package.json以使用要安装的包。 若要将依赖项添加到用于 GitHub Packages 的package.json文件中,请指定完整作用域包名,例如@my-org/server。 对于来自 npmjs.com 的包,请指定全名,例如 __ 或@babel/core。 将ORGANIZATION_NAME/PACKAGE_NAME替换为包依赖项。{ "name": "@my-org/server", "version": "1.0.0", "description": "Server app that uses the ORGANIZATION_NAME/PACKAGE_NAME package", "main": "index.js", "author": "", "license": "MIT", "dependencies": { "ORGANIZATION_NAME/PACKAGE_NAME": "1.0.0" } } -
安装此包。
npm install
从其他组织安装软件包
默认情况下,只能从一个组织使用 GitHub Packages 包。 如果要将包请求路由到多个组织和用户,可以向 .npmrc 文件中添加其他行,并将 HOSTNAME 替换为 你的 GitHub Enterprise Server 实例 的主机名,将 NAMESPACE 替换为拥有包含该项目的仓库且该包所属的个人帐户或组织的名称。
如果实例启用了子域隔离:
@NAMESPACE:registry=https://npm.HOSTNAME
@NAMESPACE:registry=https://npm.HOSTNAME
如果实例禁用了子域隔离:
@NAMESPACE:registry=https://HOSTNAME/_registry/npm
@NAMESPACE:registry=https://HOSTNAME/_registry/npm
使用官方 NPM 注册表
GitHub Packages 允许你访问位于 registry.npmjs.com 的官方 npm 注册表,前提是你的 GitHub Enterprise Server 管理员已启用此功能。 有关详细信息,请参阅连接到官方 NPM 注册表。