跳至主要内容
Deno 2 终于来了 🎉️
了解更多

deno.land/x 更新

deno.land/x 的目标是为第三方 Deno 模块提供一个中心位置,与 Deno 的操作方式一致。我们希望人们能够将类似于 https://deno.land/x/oak/mod.ts 的源代码 URL 直接复制粘贴到浏览器中,并能够查看标记的源代码以及自动生成的文档链接。

今天,我们发布了 deno.land/x 服务的重写版本,它解决了 GitHub API 速率限制和提供不可变源代码下载(如 crates.io 上)等长期存在的问题。

目标

  • 使源代码不可变。
  • 删除网站上的 GitHub API 速率限制。
  • 删除手动更新 database.json 以添加模块的必要性。

网站目前的工作方式是在后台查询 GitHub 以接收源代码。这工作得还可以,但我们会遇到 API 限制,代码可能会在用户不知情的情况下发生变化。我们最终确定的更改是保留任何已发布代码的副本,以便我们能够确保内容可用性和完整性。

更改

我们最终确定的设计是,我们提供一个 Webhook,当将其集成到您的存储库中时,它会保存任何使用 Git 标记的代码的不可变版本。

  • 源代码不再从 raw.githubusercontent.com 获取,而是从我们的 S3 存储桶获取,在那里我们可以永久保留它。
  • 发布模块现在通过 Webhook 完成,而不是通过在 deno_website2 存储库中打开 PR。
  • 您现在无法从任意提交或分支导入,只能从标签/版本导入。例如:https://deno.land/std@BRANCH 将不再起作用,只有带标签的提交(如 https://deno.land/[email protected])才有效。
  • 从注册表提供的所有文件都是不可变的。它们不能被包作者更改或删除。

这对您有什么影响?

如果您只是从 deno.land/x 使用模块,您应该会看到很少的功能差异。从网站下载和浏览文件/文件夹应该会更快,所有模块现在都会显示其 GitHub 星级数。

如果您是模块作者,您需要执行以下几件事

  1. 将 GitHub Webhook 添加到您的存储库。您可以在 https://deno.land/x 上找到相关说明,方法是点击“添加模块”按钮。
  2. 如果您在存储库中没有任何 Git 标签,请创建一个标签。只有带标签的版本才会在 deno.land/x 上发布。

我们将在添加 Webhook 后 30 天内删除所有未发布标签的模块。

未来计划

有了这种新架构,我们有机会添加各种功能。以下是我们计划的一些功能

  1. 显示所有模块的下载次数
  2. 根据模块维护状况,为所有模块评分
    • 验证deno lintdeno fmtdeno doc 和类型检查是否不会产生错误
    • 依赖项是否固定到特定版本
    • 模块是否具有 LICENCE、README.md
  3. 在网站上显示模块的依赖项
  4. 提供模块中所有 TypeScript 文件的 JS(类型剥离)版本,以便直接从 Web 浏览器导入

如果您有任何意见或反馈,请在 deno_registry2 存储库中打开一个问题,或加入 Deno Discord 聊天。