Skip to main content

此版本的 GitHub Enterprise Server 将于以下日期停止服务 2026-08-25. 已停止发布的版本不受支持。 即使针对重大安全问题,也不会发布补丁。 若要获得更好的性能、改进的安全性和 GitHub Enterprise Server 中的新功能,请参阅升级过程的 Overview。 如需升级帮助,请联系 GitHub Enterprise 支持。

在 npm 注册表上工作

你可以将 npm 配置为把包发布到 GitHub Packages,并在 npm 项目中将存储在 GitHub Packages 上的包用作依赖项。

注意

这种包类型可能不适用于你的实例,因为站点管理员可以启用或禁用每种支持的包类型。 有关详细信息,请参阅“为企业配置包生态系统支持”。

已发布 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。

  1. 向 GitHub Packages 验证。 有关详细信息,请参阅向 GitHub Packages 进行身份验证
  2. 在与 package.json 文件相同的目录中,创建或编辑 .npmrc 文件以包含指定 GitHub Packages URL 和托管包的命名空间的行。 将 NAMESPACE 替换为拥有包含你的项目的存储库的用户或组织帐户的名称。

如果启用了子域隔离:

@NAMESPACE:registry=https://npm.HOSTNAME

如果禁用了子域隔离:

@NAMESPACE:registry=https://HOSTNAME/_registry/npm
  1. 将 .npmrc 文件添加到 GitHub Packages 可在其中找到项目的存储库。 有关详细信息,请参阅“添加文件到仓库”。

  2. 验证项目的 package.json 中包的名称。 name 字段必须包含包的作用域和名称。 例如,如果你的包名为“test”,并且你要将其发布到“My-org” GitHub 组织,那么你在 package.json 中的 name 字段应为 @my-org/test

  3. 验证项目 package.json 中的 repository 字段。 repository 字段必须与 GitHub 存储库的 URL 匹配。 例如,如果存储库 URL 是 github.com/my-org/test,则存储库字段应为 https://github.com/my-org/test.git

  4. 发布包:

    npm publish
    

使用 publishConfig 文件中的 package.json 发布包

可以使用 publishConfig 文件中的 package.json 元素来指定要发布包的注册表。 有关详细信息,请参阅 npm 文档中的 publishConfig

  1. 编辑您的程序包的 package.json 文件,并添加一个 publishConfig 条目。

    如果实例启用了子域隔离:

    "publishConfig": {
      "registry": "https://npm. HOSTNAME/"
    },
    

    如果实例禁用了子域隔离:

    "publishConfig": {
      "registry": "https://HOSTNAME/_registry/npm/"
    },
    
  2. 验证项目 package.json 中的 repository 字段。 repository 字段必须与 GitHub 存储库的 URL 匹配。 例如,如果存储库 URL 是 github.com/my-org/test,则存储库字段应为 https://github.com/my-org/test.git

  3. 发布包:

    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

  1. 向 GitHub Packages 验证。 有关详细信息,请参阅向 GitHub Packages 进行身份验证
  2. 在与 package.json 文件相同的目录中,创建或编辑 .npmrc 文件以包含指定 GitHub Packages URL 和托管包的命名空间的行。 将 NAMESPACE 替换为拥有包含你的项目的存储库的用户或组织帐户的名称。

如果启用了子域隔离:

@NAMESPACE:registry=https://npm.HOSTNAME

如果禁用了子域隔离:

@NAMESPACE:registry=https://HOSTNAME/_registry/npm
  1. 将 .npmrc 文件添加到 GitHub Packages 可在其中找到项目的存储库。 有关详细信息,请参阅“添加文件到仓库”。

  2. 在项目中配置 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"
      }
    }
    
  3. 安装此包。

    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 注册表