我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们

配置 NPM 用于 GitHub Package Registry

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

GitHub 包注册表 目前提供有限的公开测试版。更多信息请参阅“关于 GitHub 包注册表”。

本文内容

向 GitHub 包注册表 验证

必须使用具有 read:packageswrite:packages 作用域的个人访问令牌才能通过 npm 在 GitHub 包注册表 中发布和删除公共包。 对于私有仓库,您的个人访问令牌还必须具有 repo 作用域。 更多信息请参阅“创建用于命令行的个人访问令牌”。

通过编辑 ~/.npmrc 文件或创建它(如果它不存在),可配置 npm 在推送新包时使用令牌。 它应类似于下面的示例。

//npm.pkg.github.com/:_authToken=PERSONAL-ACCESS-TOKEN

You can also log in with npm using your username and personal access token.

$ npm login --registry=https://npm.pkg.github.com
> Username: USERNAME> Password: TOKEN> Email: PUBLIC EMAIL ADDRESS

您也可以在 GitHub 操作 工作流程的 GitHub 包注册表 中使用 GITHUB_TOKEN 发布并使用包,而无需存储和管理个人访问令牌。有关 GITHUB_TOKEN 的更多信息,请参阅“GITHUB_TOKEN 密码”。

您可以使用脚本将 GITHUB_TOKEN 注入的 GitHub 包注册表 的适当配置文件。在包客户端的配置文件中将 GitHub 包注册表 添加为替代注册表或仓库,以及具有适当范围的 GitHub 用户名和个人访问令牌。创建配置文件的准确步骤因包类型而异。

发布包

You can set up the scope mapping for your project using either a local .npmrc file in the project or using the publishConfig option in the package.json. You can also publish multiple packages to the same GitHub repository.

注:GitHub 包注册表 只支持作用域内的 NPM 包。 作用域内的包具有名称格式 @owner/name。 作用域内的包总是以 @ 符号开头。 您可能需要更新 package.json 中的名称以使用作用域内的名称。 例如,"name": "@codertocat/hello-world-npm"

由于不支持大写字母,因此,即使您的 GitHub 用户或组织名称中包含大写字母,也必须对仓库所有者使用小写字母。

When you route all package requests through GitHub 包注册表, you can use both scoped and unscoped packages from npmjs.com.

更多信息请参阅 npm 文档中的“npm 作用域”。

使用本地 .npmrc 配置包作用域

使用 .npmrc 有助于确保发布包的其他开发者不会意外地将其发布到 npmjs.org。

  1. 在项目目录中,创建或编辑 .npmrc 文件以包含下面的行。 Replace OWNER with the name of the user or organization account on GitHub that owns the repository where you will publish the package. This will route all package requests through GitHub 包注册表.

    registry=https://npm.pkg.github.com/OWNER
  2. Check the local .npmrc into your Git repository, in the same directory as your package.json file.

  3. Verify the name of your package in your project's package.json. The name field must contain the scope and the name of the package. For example, if your package is called "test", and you are publishing to the "My-org" GitHub organization, the name field in your package.json should be @my-org/test. 由于不支持大写字母,因此,即使您的 GitHub 用户或组织名称中包含大写字母,也必须对仓库所有者使用小写字母。

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

  5. 发布包:

$ npm publish
  1. 您可以通过以下 URL 访问您的包(使用您的 GitHub 用户或组织名称替换 OWNER,使用您的仓库名称替换 REPOSITORY):
https://github.com/OWNER/REPOSITORY/packages

Configuring a package scope using publishConfig in package.json

You can set the registry that a package should be published to by using the publishConfig element in the package.json file. For more information, see "publishConfig" in the npm documentation.

  1. Edit the package.json file for your package and include a publishConfig entry.

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

  3. 发布包:

$ npm publish
  1. 您可以通过以下 URL 访问您的包(使用您的 GitHub 用户或组织名称替换 OWNER,使用您的仓库名称替换 REPOSITORY):
https://github.com/OWNER/REPOSITORY/packages

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

发布包时,默认情况下 GitHub 包注册表 会使用包名称来确定要发布到的 GitHub 仓库。 For example, a package named @my-org/test would be published to the my-org/test GitHub repository.

If you would like to publish multiple packages to the same repository, you can include the URL to the GitHub repository in the repository field of the package.json. GitHub 将根据该字段匹配仓库,而不是根据包名称。

"repository" : {
    "type" : "git",
    "url": "ssh://git@github.com/OWNER/REPOSITORY.git"
  },

有关创建包的更多信息,请参阅 npm 文档中的“如何创建 Node.js 模块”。

接收包注册表事件

在发布或更新包时,您可以接收 web 挂钩事件。更多信息请参阅“GitHub 开发者文档中的 RegistryPackageEvent”。

安装包

在项目中使用来自 GitHub 的包类似于使用来自 npmjs.com 的包。 Add your package dependencies to your package.json specifying the full package name. For packages from GitHub 包注册表, specify the full scoped package name, like @my-org/server. For packages from npmjs.com, specify the full name, like @babel/core or @lodash.

由于不支持大写字母,因此,即使您的 GitHub 用户或组织名称中包含大写字母,也必须对仓库所有者使用小写字母。

  1. 使用 .npmrc 文件或 npm login 向 GitHub 包注册表 验证。 更多信息请参阅“向 GitHub 包注册表 验证”。

  2. We recommend creating a local .npmrc in the project that points to GitHub 包注册表. This will ensure other developers on your project who run npm install can access your organization's dependencies from GitHub 包注册表 as well as any packages needed from npmjs.org. Add a line to .npmrc, replacing OWNER with the name of the user or organization account on GitHub that owns the repository where you will publish the package.

    registry=https://npm.pkg.github.com/OWNER
  3. 将本地 .npmrc 文件检入 Git 仓库。

  4. 配置 package.json 以使用包。 例如,此 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"
      }
    }

    Note: The summary for the package listing page comes directly from the description field in package.json.

  5. 安装包。

    $ npm install

有关在项目中使用 package.json 的更多信息,请参阅 npm 文档中的“使用 package.json”。

Installing packages from other organizations

By default, you can only use GitHub 包注册表 packages from one organization. If you'd like to route package requests to multiple organizations and users, you can add additional lines to your .npmrc file, replacing OWNER with the name of the user or organization account.

registry=https://npm.pkg.github.com/OWNER
@OWNER:registry=https://npm.pkg.github.com
@OWNER:registry=https://npm.pkg.github.com

删除包

To avoid breaking projects that may depend on your packages, GitHub 包注册表 does not support deleting published versions of a package or an entire published package for public repositories. Under special circumstances, such as for legal reasons or to conform with GDPR standards, you can request deleting a package through GitHub 支持. Contact GitHub 支持 using our contact form and the subject line "GitHub 包注册表."

You can delete private packages via GitHub's API. For more information, see "Access to package version deletion" in GitHub 开发者文档.

问问别人

找不到要找的内容?

联系我们