本文适合最近对npm 下载源 JSR感兴趣的小伙伴阅读
欢迎关注 前端早茶 ,与广东靓仔携手共同进阶~
前言
前端开发中,第三方 npm 模块可以极大地解放我们的生产力。我们可以编写自己的模块共享到 npm 下载源中,供其他开发者使用,也可以从下载源下载其他模块,提高开发效率。
在大陆,由于神秘结界的限制,我们从 npm 下载源下载第三方模块时慢如龟速,有时甚至直接下载失败。一种普遍的解决方案是将 npm registry 切换为镜像的下载源,比如淘宝源、腾讯源等。
“Node 之父”离开 Node 官方团队之后,重新孵化了新型的 JS 运行时 Deno,Deno 从方方面面改良了 Node。如今,“Node 之父”针对 npm registry 的顽瘴痼疾,重新发明了 JSR(JS 下载源)。
本期一起来瞄一下“Node 之父”亲笔写下的 Deno 官方博客,以及 npm 下载源的全新竞品 JSR。
正文
在过去的几年中,出现了诸如
yarn
和
pnpm
之类的新型包管理器,增强了 npm 包的下载方式。虽然但是,作为 JS 生态系统基石的 npm 包下载源(npm registry)却几乎发展停滞,它最近一次显著的更新是几年前添加的“files”选项卡。
JS 语言以其元气满满的发展而闻名天下,但似乎矛盾地陷入未能跟上时代步伐的分发模型中。
当年我创建 Node 时,JS 还没有标准的模块系统。结果,npm 下载源和 Node 默认使用
require
语法和 CJS 模块。但 CJS 模块系统存在根本性缺陷,无法在浏览器中运行。
因此,约莫十年前,也就是 2015 年,JS 采用了 ES 模块和
import
语法。如今,大多数 JS 都是使用 ES 模块编写的,但分发这些模块的途径仍然十分复杂,尤其是在涉及 TS 时。
生态系统中的这一明显代沟促使 JSR 的诞生,它不是作为另一个 npm 包管理器,而是作为一个革命性的下载源,旨在彻底改变 JS 和 TS 在服务端运行时、浏览器和各种工具之间共享的方式。
JSR 通过简化长期困扰开发者的复杂性,从根本上改进了代码分发过程。通过 ESM-only 和 TS 优先,JSR 消除了令人头大的
package.json
配置和迷宫般的
tsconfig
编译器选项。
通过软件包评分系统,JSR 激励代码分发中的最佳实践:包含每个导出符号的全面 JSDoc 文档的包将获得更高的分数,类似于 Dart 社区在 pub.dev 中的内容。正如 Go 和 Rust 等其他现代编程生态系统中所见,JSR 提供了开箱即用的自动文档生成功能。
JSR 是一个 registry(下载源),而不是 npm 下载源的另一个客户端。但这并不意味着你需要弃用 npm 的所有内容,或者硬性切换到互不相干的 JS 模块生态系统。JSR 旨在弥补 npm 下载源,而非取而代之。JSR 包允许依赖 npm 包。
JSR 针对 TS 进行了优化,仅支持 ES 模块。它适用于 Deno 和基于 npm 的项目,比如Node、Bun 等,免费且开源。
你可以像这样安装软件包:
# 基于 npm:
npx jsr add @luca/flag
# 基于 deno:
deno add @luca/flag
你也可以从命令行轻松发布自己的 JS 模块:
# 基于 npm:
npx jsr publish
# 基于 deno:
deno publish
此外,JSR 包可以在现有 npm 优先的软件中使用,因为 JSR 本身充当 npm 下载源来分发兼容 npm 的 tarball。这允许 JSR 包包含在任何使用 npm、yarn 或 pnpm 的软件中,并与私有下载源集成。JSR 分发的 npm tarball 是最棒的。
在 Deno 中,我们将安全性作为 JS 开发的首要关注点。虽然没有任何下载源可以全面监管所有已发布的代码,但 JSR 提供了发布者的透明度,并确保了发布过程的安全。
通过将 OIDC 令牌与 GitHub Actions 集成,JSR 使用软件工件的供应链级别创建高级、可验证的来源证明,并将其存储在 Sigstore 中。这不仅确保了代码的真实性,而且还建立了对开发者正在实施的内容的信任和责任。
JS 是许多程序员的通用语言,这使得 JS 具有通用性和易用性。JS 值得拥有一个中心社区,开发者可以在这里共享他们的作品,而不会过度复杂。
我们坚信 JS 多年来仍将是软件开发的核心,而 JSR 旨在支持这种持久的相关性。虽然 JSR 不是包管理器,但它提供了一种新的方法来管理和保护代码,渴望成为一个稳定、具有前瞻性的平台,增强和保护 JS 开发。
这样,JSR 不仅代表了生态系统中的另一个工具,而且代表了我们对分发 JS 和 TS 的看法的根本转变。
参考文献
- JSR:https://jsr.io
- Blog:https://deno.com/blog/jsr-is-not-another-package-manager
- Beta:https://deno.com/blog/jsr_open_beta
面试题库推荐
【精品】前端知识梳理
最后
关注我,一起携手进阶