从 NPM 切换到 GitHub 个包

Switching from NPM to GitHub Packages

我有一个用户基数较小的 NPM 包,昨天我创建了一个新版本并想发布它。我想我也可以使用新的 GitHub 软件包,所以我将所有内容都设置为 GitHub suggested 并发布了!

现在的问题是我的老NPM page running on version 2.0.2 while everyone currently uses this as their dependency while the new GitHub package还在2.0.4上,有没有办法把'synchronize'这两个。当然 GitHub 包使用 <USER>/<PACKAGE> 标签,而 NPM 只使用 <NAME>.

我唯一能做的就是在 NPM 上发布 GitHub 包 并尝试将用户从 NPM 页面上移开吗?

如果您要发布 public 包,最好只在 NPM 上发布它,因为大多数开发人员都习惯这样做。

我在工作中使用 GitHub 包,唯一的优势是它可以有效地免费托管内部包,因为我们已经支付了 GitHub 的费用。如果不是因为零价格,我们不会使用它。

如果你真的想强制所有用户迁移到 GitHub 包,并且必须设置 npm 才能使用它,你可以标记你的旧版本 npm deprecated 并用它来指向人们对新版本。

https://docs.npmjs.com/cli/v6/commands/npm-deprecate

这是另一个解决方案,但有一个问题。

将您的 registry.npmjs.org 包裹内容更改为

index.js

export * from '@schotsl/my-package';

现在您的 registry.npmjs.org 包裹(几乎)指向您的 npm.pkg.github.com 包裹。

只有 几乎 因为 registry.npmjs.org/my-package 下游项目的任何开发目录必须配置范围到服务器的映射 @schotsl/my-packagenpm.pkg.github.com 在包管理器配置文件中。

对于包管理器 'npm' 和 'yarn' (v1),可以在 与 package.json.

处于同一级别的 .npmrc 文件

所需.npmrc内容为

@schotsl:registry=https://npm.pkg.github.com
# Github PAT token, packages:read authorization only ok 
//npm.pkg.github.co/:_authToken="ghp_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

第一行是范围到服务器的映射。

第二行是 Github 个人授权令牌 (PAT),至少具有 package:read 权限。它实际上非常自由。从 any github 帐户发出的带有 package:read 的 PAT 将允许读取访问 every github 帐户包.

对于 'yarn' v2 包,.npmrc 文件不起作用,而是需要在 .yarnrc.yml.

中设置几个键

不幸的是,无法在 registry.npmjs.org/my-package 包本身内设置范围到服务器的映射和令牌。 将 .npmrc 文件放在那里不起作用,它会被忽略。这无论如何都不是一个好的解决方案,因为并非所有包管理器都读取 .npmrc 个文件。

这就是 'catch' - 使用 npm.pkg.github.com 包需要每个下游开发人员进行包管理器特定的配置设置。

此外,如果两个不同的上游包具有冲突的范围名称,每个都映射到不同的服务器怎么办?在这种情况下,当前的配置方法失败了。

功能提案不是当前行为

理想情况下,package.json 内的所有包管理器都同意一个通用接口 - 范围到服务器的映射将在直接引用该范围的包中定义。例如,在 registry.npmjs.org

my-packagepackage.json
{
  dependencies:{
    "@schotsl/my-package":"1.0.0"
  },
  registries:{
    "@schotsl/my-package":"https://npm.pkg.github.com",
  },
  auths:{
    "https://npm.pkg.github.com":"ghp_XXXXXXXXXXXXXXXX",
  },
}

那么下游用户就不需要为每个范围进行配置,并且不会发生范围名称或包名称冲突的可预测(且有风险)问题。

但事实并非如此。因此 Github Packages (npm.pkg.github.com) 似乎并不是提供 public 包的可行方法,它可能成为其他 public 包的依赖项。不过私人包裹没问题。