deno.land/x 更新
deno.land/x 的目标一直是为第三方 Deno 模块提供一个中心位置,使其与 Deno 的运作方式保持一致。我们希望人们能够将源代码 URL(例如 https://deno.land/x/oak/mod.ts)直接复制粘贴到浏览器中,并能够查看标记的源代码并链接到自动生成的文档。
今天,我们发布了 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 星星数。
如果您是模块的作者,则需要执行以下几件事
- 将 GitHub Webhook 添加到您的存储库。您可以在 https://deno.land/x 上按“添加模块”按钮找到操作说明。
- 如果您的存储库中没有任何 Git 标签,请创建一个标签。只有标记版本才会发布在 deno.land/x 上。
我们将删除所有在添加 webhook 后 30 天内未发布标签的模块。
未来计划
有了这个新的架构,我们有可能添加各种功能。以下是我们计划的一些功能
- 显示所有模块的下载计数
- 根据模块的维护程度为所有模块评分
- 验证
deno lint
、deno fmt
、deno doc
和类型检查是否没有错误 - 依赖项是否已锁定到特定版本
- 模块是否具有 LICENCE、README.md
- 验证
- 在网站上显示模块的依赖项
- 提供模块中所有 TypeScript 文件的 JS(剥离类型)版本,以便直接从 Web 浏览器导入
如果您有任何意见或反馈,请在 deno_registry2 存储库上提交 issue,或在 Deno Discord 上与我们聊天。