deno.com
本页内容

使用 JSR 发布模块

转录和示例 跳转到标题

JSR 是一个专为现代 JavaScript 项目设计的注册表。JSR——JavaScript 注册表——拥有许多很棒的功能。但如果你之前使用过 npm,你可能会想,“我为什么需要这个?为什么还要学习另一个这样的东西?”

  • 首先,它针对 TypeScript 进行了优化。
  • JSR 只支持 ES 模块。
  • 最后,npm 是 Node 项目的中心化注册表,但还有其他运行时。显然包括 Deno,但你也可以在 Bun、Cloudflare Workers 等环境中使用这些包。

把它想象成一个超集。JSR 不会取代 npm,它是在 npm 的基础上构建的。

所以在这里 jsr.io 上,你可以搜索任何你想要的东西。我正在寻找一个名为 Oak 的库,它是一个用于处理 HTTP 请求的中间件框架。我将在这里搜索它,这会把我带到文档页面

如果你想安装一个包,你只需添加它

deno add jsr:@oak/oak

然后我们可以在我们的文件中像这样使用它。

import { Application } from "jsr:@oak/oak/application";
import { Router } from "jsr:@oak/oak/router";

const router = new Router();
router.get("/", (context) => {
  context.response.body = "HEY!";
});

const app = new Application();
app.use(router.routes());
app.use(router.allowedMethods());

app.listen({ port: 8080 });

很酷!但是发布我们自己的 JSR 包是怎样的体验呢?实际上很棒。

JSR 包可以依赖来自 JSR 的其他包,也可以依赖任何 npm 包。

让我们构建一个小库并将其发布到 JSR。还记得我们之前的 sing 函数吗,我们把它做成一个可以被 JavaScript 社区其他人使用的函数。不客气,各位。

export function sing(
  phrase: string,
  times: number,
): string {
  return Array(times).fill(phrase).join(" ");
}

sing("la", 3);

现在如果我们前往 jsr.io,我们就可以发布它。我第一次尝试发布包时,JSR 会问我想发布到哪个范围(scope)。我可以在这里创建它。

然后我将创建包名称并按照说明操作。

让我们尝试在一个使用 Vite 的项目中应用我们的新包。以下命令将引导我们设置一个新的 Vite 项目。

deno run --allow-read --allow-write --allow-env npm:create-vite-extra@latest

现在我们可以通过将其添加到项目中来导入我们的新包

deno add jsr:@eveporcello/sing

然后在需要时导入它

import { sing } from "@eveporcello/sing";

所以如果我必须给自己打分,我甚至不需要给自己打分。JSR 会给我打 29% 的分数,我不知道这算什么。可能不太好。但这有一整套我可以进行的改进清单。

我需要在我的包中添加一个 readme 文件。我需要添加示例。所有这些不同的东西。这样我就可以在自己的时间里进行开发,以确保这里达到 100 分,让我的代码有良好的文档,并且非常容易被其他开发者使用。

示例页面和我们的YouTube 频道上找到更多视频。

您找到所需内容了吗?

隐私政策