过去几年,像 yarn 和 pnpm 这样的新包管理器不断涌现,增强了包的下载方式。然而,作为 JavaScript 生态系统基石的 npm 包注册表几乎没有发展。它最近一次值得注意的更新是多年前添加的“文件”选项卡。以蓬勃发展而闻名的 JavaScript 语言,似乎自相矛盾地陷入了一种跟不上时代步伐的分发模式中。
当我创建 Node 时,JavaScript 还没有标准的模块系统。因此,npm 注册表和 Node 默认使用 CommonJS (require
),这是一个存在根本缺陷的系统,使其无法在浏览器中使用。因此,大约十年前,在 2015 年,该语言采用了 ES 模块 (import
) 的语法。今天,大多数 JavaScript 都是使用 ES 模块编写的,但是分发这些模块的途径仍然很复杂,尤其是在涉及到 TypeScript 时。生态系统中的这一明显差距促使了 JSR 的创建,它不是作为另一个包管理器,而是一个变革性的注册表,旨在彻底改变 JavaScript 和 TypeScript 在服务器端运行时、浏览器和各种工具之间的共享方式。
JSR 从根本上改进了代码分发流程,简化了长期困扰开发人员的复杂性。通过仅支持 ESM 且 TypeScript 优先,JSR 消除了令人沮丧的 package.json
配置调整和迷宫般的 tsconfig 编译器选项。通过包评分系统,JSR 鼓励代码分发的最佳实践——对于包含每个导出符号的全面 JSDoc 文档的包,会授予更高的分数,类似于 Dart 社区在 pub.dev 中所做的那样。正如在其他现代编程生态系统(如 Go 和 Rust)中所见,JSR 提供了开箱即用的自动文档生成功能。
JSR 是一个注册表,而不是 npm 注册表的另一个客户端。但这并不意味着您需要放弃 npm 中的一切,或者硬性切换到不相关的 JavaScript 模块生态系统。JSR 旨在补充 npm 注册表,而不是取代它。JSR 包允许依赖 npm 包 - 例如,请参阅此包。此外,JSR 包可以在现有的 npm 优先软件中使用,因为 JSR 本身充当 npm 注册表(可在 npm.jsr.io 访问),分发 npm 兼容的 tarball。这使得 JSR 包可以包含在使用 npm、yarn 或 pnpm 的任何软件中,以及与私有注册表集成。JSR 分发的 npm tarball 是最优的。
在 Deno,我们将安全放在首位,作为 JavaScript 开发中的首要关注点。虽然没有哪个注册表可以全面监管所有已发布的代码,但 JSR 提供了有关其发布者的透明度,并确保发布过程的安全。通过将 OIDC 令牌与 GitHub Actions 集成,JSR 使用软件工件供应链级别创建高级的、可验证的出处证明,并将它们存储在 Sigstore 中。这不仅确保了代码的真实性,还在开发人员正在实施的内容中建立了信任和责任感。
JavaScript 是许多程序员的通用语言,使其既通用又易于访问。该语言值得拥有一个中央枢纽——一个城镇广场——开发者可以在这里分享他们的工作,而无需过多的复杂性。我们相信 JavaScript 将在未来许多年内仍然是软件开发的核心,而 JSR 旨在支持这种持久的相关性。虽然 JSR 不是一个包管理器,但它为我们如何管理和保护代码提供了一种新的方法,旨在成为一个稳定、前瞻性的平台,以增强和保障 JavaScript 开发。通过这种方式,JSR 不仅仅代表生态系统中的另一个工具,而是代表了我们思考如何分发 JavaScript 和 TypeScript 的方式的根本转变。
🚨️ 了解更多关于 JSR 的信息 🚨️