如何使用Github发布私有NPM包

最近在做一个基于Nuxt的项目时,我需要将一些应用程序级的逻辑分离到一个单独的Nuxt模块中,这样就可以独立地管理它,并在其他应用程序中重用它。
这应该很简单,但我必须将包变为私有,这为新模块的开发提供了很大的方向。
在这篇文章中,我将讨论我在Github包注册表上以私有npm包的形式发布这个包时遇到的问题,以及如何在另一个项目中使用私有包。本文不介绍如何创建

私有存储库等于私有 Github 包

我们首先将模块存储库设为私有。如果您的存储库已经是私有的,那么您可以跳过此步骤。

私有存储库将作为私有 npm 包发布。

使您的包私有化的第一步可能是使您的包的存储库私有化。

如何使用Github发布私有NPM包_第1张图片

要将您的 Github 存储库设为私有,请单击“设置”选项卡,滚动到底部,然后单击“更改存储库可见性”。仅当您的存储库尚未私有时才执行此操作。

如何使用Github发布私有NPM包_第2张图片

创建 Github 个人访问令牌

如果你最近经常使用 Github,你一定已经看到了关于密码被弃用以支持更安全的访问令牌的通知。Github 开始向自 2020 年底以来仍在使用用户名和密码的基本身份验证方法的人发送电子邮件。您可能一定见过其中一个看起来像这样:

2020 年 9 月 29 日 13:37 (UTC),您使用密码通过 GitHub API 使用python-requests/2.18.4:访问端点。使用 API 密码的基本身份验证已被弃用,并且很快将不再有效。有关建议的解决方法和删除日期的更多信息,请访问此站点。

在使用GitHub API或命令行时,Github 个人访问令牌 (PAT) 是使用密码对 GitHub 进行身份验证的替代方法。(Github 文档)

要生成新令牌,请转到您的开发人员设置页面并单击Generate a new token

如何使用Github发布私有NPM包_第3张图片

Github 开发者设置页面

我们需要一个带有write:packages范围的令牌;我们将选择保留 30 天的默认到期日期:

Github 个人访问令牌页面

复制您的令牌并将其存储在安全的地方,因为我们将在本教程的其余部分使用它。如果你丢失了它,Github 将不会再向你展示它,所以你将不得不销毁它并创建一个新的:

如何使用Github发布私有NPM包_第4张图片

使用 Github Registry 使用 NPM 进行身份验证

要发布 npm 包,您需要通过 Github 包注册表对 npm 进行身份验证。有两种方法可以做到这一点:您可以使用.npmrc文件进行身份验证或使用命令行。在本教程中,我们将使用这两种方法;我们将使用命令行来创建我们的包,而在托管项目中使用我们的包时我们将使用.npmrc 。

使用命令行验证您的开发环境以连接注册表,这足以在您开发包时使用。尽管如此,在部署包以在生产环境中进行身份验证时,您仍需要.npmrc文件。我们将很快详细介绍。

使用命令行进行身份验证以创建我们的包

为此,请运行以下命令,该命令将提示您使用您的用户名、电子邮件和密码进行响应(在此处使用您生成的令牌)。我们正在使用我们的 Github 帐户详细信息和我们在前面步骤中生成的令牌对 Github 包注册表进行身份验证。--scope 这里是 NPM v2 中引入的一组包的唯一标识符。

范围可以附加到注册表,因此在该范围下发布的每个包都假定相同的注册表,默认情况下 --scope 将假定官方 NPM 注册表。在我们的例子中,我们希望它是 Github 包注册表,因此在下面的命令中,我们提供了一个 --registry 标志来指向https://npm.pkg.github.com

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

此处的范围可能是您的 GitHub 用户名或您的 Github 组织的用户名;一旦你的包发布了,你的包的用户可以像这样安装它:npm install @scope/package.

如何使用Github发布私有NPM包_第5张图片

运行上述命令后,您应该会看到消息:如果您的身份验证成功,则以 goodhands 身份登录到https://npm.pkg.github.com/上的 @goodhands 范围。

发布你的包

如果你做到了这一点,恭喜你!✨

现在,是时候发布我们的包了,我们将看看一些清单,以使这个过程尽可能顺利。

本教程不涉及创建 Node.js 包,因此我希望您在阅读本教程之前已经拥有一个包。

清单 1:确保您的 package.json 具有正确的名称

在设置我们的开发环境时,我们创建了一个范围并将其附加到注册表。现在,为了让您的包在发布后转到正确的位置,即https://npm.pkg.github.com/,您需要使用与您进行身份验证的范围相同的范围作为您的包名称:

{
  "name": "@goodhands/private-module",
  "version": "1.0.0",
  "description": "An example package",
  "main": "index.js",
...

由于我使用了@goodhands 范围进行身份验证,因此我必须将该名称添加到我的 package.json 中。

现在您应该保存更改、提交并推送到 Github。

清单 2:Semver

根据semver.org的说法,常规项目中的版本控制可能并不需要对主要、次要或补丁更改给予太多关注。但是,由于我们发布的包将被其他应用程序使用和依赖,因此坚持正确的约定非常重要。

我发现对自动化这很有用的一个工具是标准版本包,它可以自动化版本控制以符合 semver 标准并基于Conventional Commits生成CHANGELOG.md

为了帮助快速发布、标记和更新变更日志,我在 package.json 的脚本中附加了标准版本命令,以及 Git 和 npm 命令的混合:

"scripts": {
    "release": "standard-version && git push --follow-tags && npm publish"
}

请记住:您必须先在项目中安装标准版本作为 devDependency,然后才能将其用作脚本。 

要添加standard-version到您的项目,只需npm install -D standard-version@latest在项目的根目录中运行。

我们release附加到以下代码的脚本:standard-version && git push --follow-tags && npm publish 将执行以下步骤:

该脚本的第一部分standard-version将:

  1. 添加所有新编辑的文件
  2. 使用我们项目的最新版本创建标签
  3. 使用我们最近的提交创建一个 changelod.md

第二部分是您可能已经习惯git push –follow-tags的常规部分,但该部分将确保它将所有新创建的标签推送到当前提交。git push–follow-tags

我们脚本的最后一部分是npm publish将您最新版本的软件包发布到注册表。

如果您的包已成功发布,您应该会在日志中看到类似的输出:

npm notice
npm notice package: @goodhands/[email protected]
npm notice === Tarball Contents ===
npm notice 38B  index.js
npm notice 744B package.json
npm notice 307B CHANGELOG.md
npm notice === Tarball Details ===
npm notice name:          @goodhands/private-module
npm notice version:       1.0.2
npm notice package size:  690 B
npm notice unpacked size: 1.1 kB
npm notice shasum:        e5432314e2[...]55f01523183
npm notice integrity:     sha512[...]qANw
npm notice total files:   3
npm notice
+ @goodhands/[email protected]

现在,如果您访问 Github 上的包存储库,您应该会看到您创建的标签以及包链接:

如何使用Github发布私有NPM包_第6张图片

如果你点击你的包链接,你会发现关于你的包的更多细节,包括安装命令、总下载量、以前的版本等:

如何使用Github发布私有NPM包_第7张图片

在另一个项目中使用你的私有包

要在另一个项目中使用您的包,在安装包之前,您需要首先使用以下详细信息创建一个.npmrc文件:

@goodhands:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${NPM_TOKEN}

同样,这里的@goodhands 是我们附加到 Github 包注册表的范围,而NPM_TOKEN是在另一个项目中使用您的包所需的令牌。NPM_TOKEN将存储在生产环境变量中,而在开发中,您希望将其存储在.bashrc文件或类似文件中,具体取决于您的操作系统;这样您就可以使用相同的令牌来验证多个项目,而无需在每个项目中都有一个.env文件。

个人包与组织包

发布个人包的流程与发布组织包的流程几乎没有区别。对于 NPM 私有包,唯一可以使用它们的人就是你。使用您在创建包时进行身份验证的相同令牌,您必须在您希望在其中使用包的任何项目中替换NPM_TOKEN。您可以通过.bashrc文件执行此操作。

对于组织包,这意味着您的 --scope 标志引用了 Github 上的组织,并且包的存储库也在同一个组织下,那么组织内有权访问存储库的每个软件开发人员都可以在另一个组织中使用该包项目。

在外部项目中安装你的包

就像任何其他 npm 包一样,您只需通过运行指向您的包名称和首选版本的命令来安装它:

npm install @goodhands/[email protected]

在 Netlify 或 Heroku 上托管

当使用您的包的项目托管在 Netlify 或 Heroku 等平台上时,您只需将NPM_TOKEN添加到环境变量中,使用您在创建包时用于身份验证的相同令牌。您将能够成功使用您的包。

最后一句话

也许创建私有包并使用 Github 注册中心发布的亮点主要是在我们在本文中完成的步骤中使用 NPM 进行身份验证时提供 Github 注册中心作为注册中心。

您必须确保您的存储库是私有的。一旦这样,它就会设置一个身份验证框架,您必须在其中使用从开发人员设置页面生成的令牌告诉 Github 您的身份,该令牌也必须具有packages权限。

现在,对您组织中的其他开发人员进行身份验证(如果您作为组织创建包)就像邀请他们加入您的组织一样简单。然后他们还可以生成一个可以对他们进行身份验证的令牌。

常见问题(FAQ)

问:如何使用来自 GitHub 的 npm 包?

您可以像使用 NPM 注册表上的任何其他包一样使用来自 Github 的 NPM 包(使用“npm install”命令),唯一需要注意的是私有包需要作者或创建包的组织授予您特殊访问权限。

问:什么是 GitHub 包注册表?

Github 包注册中心是 Github 发布和使用包的平台,它集成了许多包管理器,其中 NPM 是其中的一部分。它提供了一种直接从代码存储库构建和发布包的安全且无缝的方法。

问:如何发布私有 npm 包?

发布私有 npm 包需要我们在文章中概述的特殊步骤。NPM 注册中心(https://www.npmjs.com/ )您以7 美元的费用创建私有包,而Github包注册中心允许您简单地将私有存储库转换为私有包,因此您可以创建私有包在 Github 上免费。

你可能感兴趣的:(git,Vue,npm,node.js,git,github)