跳至主要内容

使用 npm 注册表

您可以将 npm 配置为将软件包发布到 GitHub Packages,并在 npm 项目中将存放在 GitHub Packages 上的软件包作为依赖使用。

对 GitHub Packages 进行身份验证

注意

GitHub Packages 仅支持使用个人访问令牌(经典版)进行身份验证。欲了解更多信息,请参阅 管理您的个人访问令牌

您需要访问令牌才能发布、安装和删除私有、内部以及公共软件包。

您可以使用个人访问令牌(经典版)对 GitHub Packages 或 GitHub API 进行身份验证。创建个人访问令牌(经典版)时,可根据需要为令牌分配不同的范围。有关个人访问令牌(经典版)的软件包相关范围的更多信息,请参阅 GitHub Packages 权限概述

要在 GitHub Actions 工作流中对 GitHub Packages 注册表进行身份验证,您可以使用

  • GITHUB_TOKEN 来发布与工作流仓库关联的软件包。
  • 使用至少具备 read:packages 范围的个人访问令牌(经典版)来安装与其他私有仓库关联的软件包(如果仓库被授予读取软件包的权限,也可以使用 GITHUB_TOKEN。参见 配置软件包的访问控制和可见性)。

在 GitHub Actions 工作流中进行身份验证

此注册表支持细粒度权限。对于支持细粒度权限的注册表,如果您的 GitHub Actions 工作流使用个人访问令牌对注册表进行身份验证,我们强烈建议您将工作流更新为使用 GITHUB_TOKEN。有关使用个人访问令牌对注册表进行身份验证的工作流更新指南,请参阅 使用 GitHub Actions 发布和安装软件包

注意

GitHub Actions 工作流使用 REST API 删除和恢复软件包的功能目前处于公开预览阶段,可能会有变更。

您可以在 GitHub Actions 工作流中使用 GITHUB_TOKEN 删除或恢复软件包(通过 REST API),前提是该令牌对软件包拥有 admin 权限。使用工作流发布软件包的仓库,以及您已显式连接到软件包的仓库,都会自动获得该仓库中软件包的 admin 权限。

有关 GITHUB_TOKEN 的更多信息,请参阅 在工作流中使用 GITHUB_TOKEN 进行身份验证。有关在 Actions 中使用注册表的最佳实践,请参阅 安全使用参考

您还可以为 GitHub Codespaces 和 GitHub Actions 分别独立设置软件包的访问权限。有关详细信息,请参阅 配置软件包的访问控制和可见性配置软件包的访问控制和可见性

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

您必须使用具备相应范围的个人访问令牌(经典版)来在 GitHub Packages 中发布和安装软件包。更多信息请参阅 GitHub Packages 入门

您可以通过编辑每个用户的 ~/.npmrc 文件并加入个人访问令牌(classic),或在命令行使用用户名和个人访问令牌登录 npm,以对 GitHub Packages 进行身份验证。

要通过在 ~/.npmrc 文件中添加个人访问令牌(classic)进行身份验证,请编辑项目的 ~/.npmrc 文件,加入以下行,用您的个人访问令牌替换 TOKEN。如果不存在 ~/.npmrc 文件,请新建一个。

//npm.pkg.github.com/:_authToken=TOKEN

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

如果您使用的是 npm CLI 9 及以上版本,并通过命令行登录或退出私有注册表,建议使用 --auth-type=legacy 选项,以便从提示读取身份验证信息,而不是使用默认的浏览器登录流程。更多信息请参阅 npm-login

如果 GitHub Packages 不是您使用 npm 时的默认包注册表,并且想使用 npm audit 命令,建议在对 GitHub Packages 进行身份验证时,使用 --scope 标志并指定承载该包的命名空间(包所属的个人账户或组织)。

$ npm login --scope=@NAMESPACE --auth-type=legacy --registry=https://npm.pkg.github.com

> Username: USERNAME
> Password: TOKEN

发布软件包

注意

  • 包名称和作用域只能使用小写字母。
  • npm 版本的 tarball 大小必须小于 256 MB。

GitHub Packages 注册表在您的组织或个人账户内存储 npm 包,并允许您将包关联到仓库。您可以选择继承仓库的权限,或独立于仓库设置细粒度权限。

首次发布包时,默认可见性为私有。要更改可见性或设置访问权限,请参阅 配置包的访问控制和可见性。有关将已发布的包与仓库关联的更多信息,请参阅 将仓库连接到包

只要在 package.json 文件中包含 repository 字段,即可在发布包的同时将其连接到仓库。您也可以使用此方法将多个包连接到同一仓库。详情请参阅 将多个软件包发布到同一仓库

注意

如果您发布的软件包已链接到仓库,软件包会自动继承该仓库的访问权限,并且链接仓库中的 GitHub Actions 工作流也会自动获得对该软件包的访问权限,除非您的组织已禁用访问权限的自动继承。更多信息,请参阅 配置软件包的访问控制和可见性

您可以通过项目中的本地 .npmrc 文件或在 package.json 中使用 publishConfig 选项来设置作用域映射。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.pkg.github.com
    
  3. .npmrc 文件添加到仓库,以便 GitHub Packages 能找到您的项目。更多信息请参阅 向仓库添加文件

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

  5. 确认项目的 package.json 中的 repository 字段。该字段必须与您的 GitHub 仓库 URL 相匹配。例如,如果仓库 URL 为 github.com/my-org/test,则 repository 字段应为 https://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.pkg.github.com"
    },
    
  2. 确认项目的 package.json 中的 repository 字段。该字段必须与您的 GitHub 仓库 URL 相匹配。例如,如果仓库 URL 为 github.com/my-org/test,则 repository 字段应为 https://github.com/my-org/test.git

  3. 发布软件包

    npm publish
    

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

若要发布多个软件包并将其关联到同一仓库,您可以在每个软件包的 package.json 中的 repository 字段加入相同的 GitHub 仓库 URL。更多信息请参阅 npm 文档中的 创建 package.json 文件创建 Node.js 模块

为确保仓库 URL 正确,请将 REPOSITORY 替换为包含您想要发布的软件包的仓库名称,并将 OWNER 替换为拥有该仓库的个人账户或组织名称。

GitHub Packages 将根据 URL 匹配仓库。

"repository":"https://github.com/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.pkg.github.com
    
  3. .npmrc 文件添加到仓库,以便 GitHub Packages 能找到您的项目。更多信息请参阅 向仓库添加文件

  4. 在项目中配置 package.json 以使用您要安装的包。若要将 GitHub Packages 的包依赖添加到 package.json,请指定完整的有作用域包名,例如 @my-org/server。对于来自 npmjs.com 的包,请指定完整名称,例如 @babel/corelodash。将 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"
      }
    }
    
  5. 安装该包。

    npm install
    

从其他组织安装软件包

默认情况下,您只能使用来自单一组织的 GitHub Packages 包。如果希望将包请求路由到多个组织和用户,可以在 .npmrc 文件中添加额外的行,将 NAMESPACE 替换为对应的个人账户或组织名称。

@NAMESPACE:registry=https://npm.pkg.github.com
@NAMESPACE:registry=https://npm.pkg.github.com
© . This site is unofficial and not affiliated with GitHub, Inc.