本页内容
使用 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 分,让我的代码有良好的文档,并且非常容易被其他开发者使用。