使用 npm 注册表

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

GitHub Packages 可用于 GitHub Free、GitHub Pro、组织的 GitHub Free、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server 和 GitHub AE。

注: GitHub Packages 目前正在测试用于 GitHub AE 。

注:安装或发布 Docker 映像时,GitHub Packages 当前不支持外部图层,如 Windows 映像。

已发布 npm 版本的限制

如果您发布超过 1,000npm 软件包版本到 GitHub Packages,在使用过程中可能会出现性能问题和超时。

将来,为了提高服务的性能,您将无法在 GitHub 上发布超过 1,000 个版本的包。 在达到此限制之前发布的任何版本仍将是可读的。

如果达到此限制,请考虑删除包版本或联系支持人员寻求帮助。 实施此限制后,我们的文档将就此限制进行更新。 更多信息请参阅“删除包”或“联系支持”。

向 GitHub Packages 验证

您需要访问令牌才能发布、安装和删除 GitHub Packages 中的包。

您可以使用个人访问令牌 (PAT) 向 GitHub Packages 或 GitHub API 验证。 创建个人访问令牌时,可根据需要为令牌分配不同的作用域。 有关 PAT 与包相关的域的更多信息,请参阅“关于 GitHub Packages 的权限”。

要在 GitHub Actions 工作流程内向 GitHub Packages 注册表验证,您可以使用:

  • GITHUB_TOKEN 来发布与工作流程仓库相关联的包。
  • PAT 来安装与其他私有仓库(GITHUB_TOKEN 无法访问)相关联的包。

有关 GitHub Actions 工作流程中使用的 GITHUB_TOKEN 的更多信息,请参阅“工作流程中的身份验证”。

使用个人访问令牌进行身份验证

您必须使用具有适当范围的个人访问令牌才可在 GitHub Packages 中发布和安装。 更多信息请参阅“关于 GitHub Packages”。

通过编辑您的每用户 ~/.npmrc 文件以包含个人访问令牌,或者在命令行上使用用户名和个人访问令牌登录 npm,您可以使用 npm 向 GitHub Packages 验证。

要通过将个人访问令牌添加到 ~/.npmrc 文件进行身份验证,请编辑项目的 ~/.npmrc 文件以包含以下行,将 HOSTNAME 替换为 您的企业 的主机名,并将 TOKEN 替换为您的个人访问令牌。 如果 ~/.npmrc 文件不存在,请新建该文件。

//npm.HOSTNAME//:_authToken=TOKEN

要通过登录到 npm 进行身份验证,请使用 npm login 命令,将 USERNAME 替换为您的 GitHub 用户名,将 TOKEN 替换为您的个人访问令牌,将 PUBLIC-EMAIL-ADDRESS 替换为您的电子邮件地址。

如果 GitHub Packages 不是使用 npm 的默认包注册表,并且您要使用 npm audit 命令,我们建议您在对 GitHub Packages 进行身份验证时,将 --scope 标志与包的所有者一起使用。

$ npm login --scope=@OWNER --registry=https://npm.HOSTNAME/

> Username: USERNAME
> Password: TOKEN
> Email: PUBLIC-EMAIL-ADDRESS

发布包

注:包名称和作用域只能使用小写字母。

默认情况下,GitHub Packages 将包发布到您在 package.json 文件的名称字段中指定的 GitHub 仓库。 例如,您要发布一个名为 @my-org/test 的包到 my-org/test GitHub 仓库。 通过在包目录中包含 README.md 文件,您可以添加包列表页面的摘要。 更多信息请参阅 npm 文档中的“使用 package.json”和“如何创建 Node.js 模块”。

通过在 package.json 文件中包含 URL 字段,您可以将多个包发布到同一个 GitHub 仓库。 更多信息请参阅“将多个包发布到同一个仓库”。

您可以使用项目中的本地 .npmrc 文件或使用 package.json 中的 publishConfig 选项来设置项目的作用域映射。 GitHub Packages 只支持作用域内的 npm 包。 作用域内的包具有名称格式 @owner/name。 作用域内的包总是以 @ 符号开头。 您可能需要更新 package.json 中的名称以使用作用域内的名称。 例如,"name": "@codertocat/hello-world-npm"

在发布包后,您可以在 GitHub 上查看该包。 更多信息请参阅“查看包”。

使用本地 .npmrc 文件发布包

您可以使用 .npmrc 文件来配置项目的作用域映射。 在 .npmrc 文件中,使用 GitHub Packages URL 和帐户所有者,使 account owner so GitHub Packages 知道将包请求路由到何处。 使用 .npmrc 文件防止其他开发者意外地将包发布到 npmjs.org 而不是 GitHub Packages。

  1. 向 GitHub Packages 验证。 更多信息请参阅“向 GitHub Packages 验证”。

  2. 在与 package.json 文件相同的目录中,创建或编辑 .npmrc 文件以包含指定 GitHub Packages URL 和帐户所有者的行。 将 OWNER 替换为拥有项目所在仓库的用户或组织帐户的名称。

    如果启用了子域隔离:

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

    如果禁用了子域隔离:

    @OWNER:registry=https://HOSTNAME/_registry/npm
  3. .npmrc 文件添加到 GitHub Packages 可在其中找到您的项目的仓库。 更多信息请参阅“添加文件到仓库”。

  4. 验证项目的 package.json 中包的名称。 name 字段必须包含包的作用域和名称。 例如,如果您的包名为 "test",并且要发布到 "My-org" GitHub 组织,则 package.json 中的 name 字段应为 @my-org/test

  5. 在项目的 package.json 中验证 repository(仓库)字段。 repository(仓库)字段必须匹配 GitHub 仓库的 URL。 例如,如果您的仓库 URL 是 github.com/my-org/test,则仓库字段应为 git://github.com/my-org/test.git

  6. 发布包:

    $ npm publish

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

您可以使用 package.json 文件中的 publishConfig 元素来指定要发布包的注册表。 更多信息请参阅 npm 文档中的“publishConfig”。

  1. 编辑包的 package.json 文件并包含 publishConfig 条目。

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

  3. 发布包:

    $ npm publish

将多个包发布到同一个仓库

要将多个包发布到同一个仓库,您可以在每个包的 package.json 文件的 repository 字段中包含 GitHub 仓库的 URL。

为确保仓库的 URL 正确,请将 REPOSITORY 替换为要发布的包所在仓库的名称,将 OWNER 替换为拥有该仓库的 GitHub 用户或组织帐户的名称。

GitHub Packages 将根据该 URL 匹配仓库,而不是根据包名称。

"repository":"https://HOSTNAME/OWNER/REPOSITORY",

安装包

通过在项目的 package.json 文件中将包添加为依赖项,您可以从 GitHub Packages 安装包。 有关在项目中使用 package.json 的更多信息,请参阅 npm 文档中的“使用 package.json”。

默认情况下,您可以从一个组织添加包。 更多信息请参阅“从其他组织安装包”。

You also need to add the .npmrc file to your project so that all requests to install packages will be routed to GitHub Packages.

By default, you can only use npm packages hosted on your enterprise, and you will not be able to use unscoped packages. For more information on package scoping, see "npm-scope" in the npm documentation. If required, GitHub support can enable an upstream proxy to npmjs.org. Once an upstream proxy is enabled, if a requested package isn't found on your enterprise, GitHub Packages makes a proxy request to npmjs.org.

  1. 向 GitHub Packages 验证。 更多信息请参阅“向 GitHub Packages 验证”。

  2. 在与 package.json 文件相同的目录中,创建或编辑 .npmrc 文件以包含指定 GitHub Packages URL 和帐户所有者的行。 将 OWNER 替换为拥有项目所在仓库的用户或组织帐户的名称。

    如果启用了子域隔离:

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

    如果禁用了子域隔离:

    @OWNER:registry=https://HOSTNAME/_registry/npm
  3. .npmrc 文件添加到 GitHub Packages 可在其中找到您的项目的仓库。 更多信息请参阅“添加文件到仓库”。

  4. 配置项目中的 package.json 使用要安装的包。 要将包依赖项添加到 GitHub Packages 的 package.json 文件,请指定完整的作用域内包名称,例如 @my-org/server。 对于来自 npmjs.com 的包,请指定全名,例如 @babel/core@lodash。 例如,以下 package.json@octo-org/octo-app 包用作依赖项。

    {
      "name": "@my-org/server",
      "version": "1.0.0",
      "description": "Server app that uses the @octo-org/octo-app package",
      "main": "index.js",
      "author": "",
      "license": "MIT",
      "dependencies": {
        "@octo-org/octo-app": "1.0.0"
      }
    }
    
  5. 安装包。

    $ npm install

从其他组织安装包

默认情况下,您只能使用来自一个组织的 GitHub Packages 包。 如果想将包请求传送到多个组织和用户,您可以添加额外行到 .npmrc 文件,将 HOSTNAME 替换为 您的企业 实例的主机名,并将 OWNER 替换为拥有项目所在仓库的用户或组织帐户的名称。

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

延伸阅读

此文档对您有帮助吗?

隐私政策

帮助我们创建出色的文档!

所有 GitHub 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。