JSR作为NPM的超集,有什么特性?

本文为翻译作品,原文链接:Reviewing JSR: The New NPM?

摘要

JSR 是由 Deno 公司创建的一款新的开源 JavaScript 包注册中心,作为广泛使用的 NPM 包管理器的现代超集,提供了许多强大的功能,如内置对 TypeScript 的支持(无需使用 .d.ts 文件)和自动生成文档等。

NPM

NPM 多年来一直是 Node.js 的主要贡献者,也是 JavaScript 生态系统的重要组成部分。

NPM 是目前使用最广泛的 JavaScript 包管理器,托管了超过 2,600,00 个包,并在上个月就有超过 2500 亿次下载。

但 NPM 的一个主要问题是它过时了,它甚至早于 TypeScript 和 ESModules 的出现,而这些技术已经成为大多数开发 JavaScript 应用程序的标准技术。这些问题可以通过构建步骤和 .d.ts 文件来解决,但这些解决方案可能会使构建、发布和使用包变得复杂。JSR 旨在解决这样的问题。

JSR

JSR 是由 Deno 公司创建的一个新项目,作为一个新的现代 JavaScript 包注册中心,旨在通过解决 NPM 的一些常见问题和限制来建立在 NPM 之上。

JSR 是一个包注册中心(存储包的服务器),而不是一个包管理器(安装包的工具)。你可以使用现有的包管理器,如 npm、yarn 或 pnpm 与 JSR 一起使用。

JSR 旨在改进包的构建、发布和使用的开发过程。其主要特性包括:

原生 TypesScript 和 ESM 支持

JSR 为 TypeScript 和 ESM(实际上,它强制你使用 ESM)构建,无需 .d.ts 文件或为跨运行时兼容性转译代码。它还提供自动 API 文档生成,并将包分发为 web 标准的 ECMAScript 模块。

NPM 的超集

JSR 不是 npm 注册中心的替代品;它是 npm 的超集。

你不需要放弃你所知道的关于 Node.js 和 NPM 的一切就开始使用 JSR。它与任何 JavaScript 包管理器以及任何包含 node_modules 文件夹的项目即插即用。

跨运行时支持

JSR 提供对任何 JavaScript 运行时的开箱即用支持,其模块可以在 Node.js、Deno、Bun、Cloudflare Workers 等运行时中使用。

代码

注意:下面的代码示例直接来自 jsr.io。

使用 JSR 包

使用下面的命令之一将包添加到你的项目中。这将把 @luca/cases 的最新版本添加到你的项目中。

bash 复制代码
# deno
deno add @luca/cases

# npm(使用 npx、yarn dlx、pnpm dlx 或 bunx 中的任何一个)
npx jsr add @luca/cases

添加包后,你可以这样在 ES 模块中导入和使用它:

javascript 复制代码
import { camelCase } from "@luca/cases";

camelCase("hello world"); // "helloWorld"

在 Deno 中,你可以使用 jsr: 参数和 Deno 对 JSR 的本地支持,选择性地使用 JSR 包,而无需安装步骤。

javascript 复制代码
import { camelCase } from "jsr:@luca/cases@1";

camelCase("hello world"); // "helloWorld"

你可以在 jsr.io 上找到更多包。JSR 网站上的每个包都会显示文档,这些文档是从包的源代码自动生成的。了解更多关于使用包的信息。

发布 JSR 包

JSR 包使用 jsr publish / deno publish 命令发布。你可以从本地机器或 CI 发布包。

首先,编写你的代码。JSR 包是用 JavaScript 或 TypeScript 编写的,并作为 ES 模块发布。

typescript 复制代码
// mod.ts
/**
 * 提供问候人的函数的模块。
 * @module
 */

/**
 * 问候一个人。
 *
 * @param name 要问候的人的名字。
 */
export function greet(name: string) {
  console.log(`Hello, ${name}!`);
}

然后,为你的包添加一个配置文件。这个文件包含包元数据,如名称、版本和入口点。exports 字段告诉 JSR 哪些模块应该被你的包的用户导入。

json 复制代码
// jsr.json / deno.json

{
  "name": "@luca/greet",
  "version": "1.0.0",
  "exports": "./mod.ts"
}

最后,运行 npx jsr publish 或 deno publish 来发布你的包。你将被提示使用 JSR 进行身份验证,然后你的包将被发布。

ruby 复制代码
$ npx jsr publish

访问 https://jsr.io/auth?code=ABCD-EFGH 来授权发布 @luca/greet

等待中...

授权成功。作为 Luca Casonato 身份验证

正在发布 @luca/greet@1.0.0 ...

成功发布 @luca/greet@1.0.0

访问 https://jsr.io/@luca/greet@1.0.0 了解详情

了解更多关于发布包的信息。

结论

JSR 是一个创新的工具,对 JavaScript 生态系统来说可能具有很大的价值,如果它能够获得足够的采用,那么它将是改善开发者和用户体验的一大步。

相关推荐
志尊宝3 小时前
Vue3 零基础每日笔记(071):暗黑模式与主题切换——CSS 变量 + Element Plus 暗黑方案
前端·css·笔记·vue·html·前端开发·软件开发
Flynt3 小时前
Deno 官宣一年后停更:我把它的招牌特性在 Node 26 和 Bun 里挨个找了一遍
node.js·deno·bun
刘发财4 小时前
前端如何生成10000页PDF文件?
前端·javascript·开源
A接拉起0074 小时前
2026 年 JavaScript 开发者需要了解的知识
前端·javascript·后端
_馒头4 小时前
pixiJs游戏开发实践 - 跳棋小游戏
javascript·vue.js
用户11481867894844 小时前
面试官:大屏项目里十几个模块同时渲染上万条数据,怎么做到不卡?
前端·性能优化
前端市界4 小时前
Pro React Admin: 统一工程底座,承载多种应用...
前端·github
葡萄城技术团队4 小时前
dsh-spreadjs-editor 当前支持什么:安装前需要了解的几件事
前端
三*一5 小时前
优化修整算法
前端·javascript·算法
楠楠子呀6 小时前
英语、西语、阿语客户各开一个口:多语言获客的分流方案
开发语言·javascript·ecmascript·跨境电商·whatsapp·营销工具