跳到主要内容
JSR is not another package manager

JSR 不是另一个包管理器

过去几年,像 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 的方式的根本转变。



Tweet from @robpalmer2 Tweet from @slightlycode Tweet from @slicknet Tweet from @michael_rispoli

🚨️ 了解更多关于 JSR 的信息 🚨️