• Node 之父新作:一个全新的 NPM 下载源工具!
  • 发布于 1个月前
  • 66 热度
    0 评论
  • 怅忘归
  • 0 粉丝 25 篇博客
  •   
在前端开发中,使用第三方 npm 模块可以显著提高我们的工作效率。我们既可以创建并分享自己的模块到 npm 仓库,供其他开发者使用,也可以从仓库中获取他人的模块以加快开发进程。然而,在中国大陆,由于特定的网络限制,从 npm 仓库下载模块经常异常缓慢,甚至直接失败。一个常见的解决方法是切换到如淘宝或腾讯等镜像源。

在离开 Node 官方团队后,“Node 之父”开发了一个新的 JavaScript 运行时环境 Deno,该环境在多个方面对 Node 进行了改进。最近,针对 npm 仓库中的长期问题,他提出了一个名为 JSR(JS 下载源)的全新方案。

“这不是另一个 npm 包管理器!”“Node 之父”这样强调。让我们通过查阅“Node 之父”在 Deno 官方博客上的文章,了解一下这个与 npm 仓库竞争的新项目 JSR。

在最近几年,新的包管理器如yarn和pnpm已经增强了npm包的下载体验。然而,作为JavaScript生态系统基石的npm注册源本身的发展几乎处于停滞状态,其最近一次显著更新是几年前引入的“files”标签。尽管JavaScript语言发展迅速,其分发模式却显得相对落后。

在我创建Node的时代,JavaScript尚无统一的模块系统,导致npm注册源及Node默认采用require语法和CJS模块,这一模块系统无法在浏览器中使用,具有根本性缺陷。大约在2015年,JavaScript采纳了ES模块和import语法。尽管如今大多数JavaScript代码都采用ES模块,其分发路径仍然复杂,特别是在涉及到TypeScript时。

为解决这些问题,JSR应运而生,它不仅仅是另一个npm包管理器,而是一种旨在改变JavaScript和TypeScript代码在服务器、浏览器和各种工具间共享方式的革命性下载源。JSR通过简化开发者长期面临的复杂性,从根本上改善了代码的分发方式。它专注于ES模块,并优先支持TypeScript,消除了繁琐的package.json配置和tsconfig编译选项的困扰。

JSR还通过包评分系统鼓励最佳实践,类似于Dart社区在pub.dev中的做法,为包含详尽JSDoc文档的每个导出符号的包提供更高的评分。与Go和Rust等其他现代编程生态系统一样,JSR提供开箱即用的自动化文档生成功能。

JSR本质上是一个新的registry,不仅仅是npm的另一个客户端。它不要求开发者放弃现有的npm内容或完全切换到一个全新的JS模块生态,而是旨在补充现有的npm注册源。它允许依赖npm包,专为TypeScript优化,并且只支持ES模块。适用于Deno和基于npm的项目如Node、Bun等,且完全开源免费。

你可以像这样安装软件包:
# 基于 npm:
npx jsr add xxx
# 堆代码 duidaima.com
# 基于 deno:
deno add xxx
JSR包能够集成到依赖npm的现有软件系统中,因为JSR自身作为一个npm下载源分发与npm兼容的tarball文件。这使得JSR包能够被包括在任何使用npm、yarn或pnpm的项目中,并且可以与私有下载源无缝集成。这种方式的npm tarball分发被认为是非常优秀的。

在Deno环境中,我们特别重视安全性,把它作为JavaScript开发的首要考量。虽然没有下载源能够完全监控所有发布的代码,但JSR通过提高发布者的透明度和确保发布过程的安全性,提供了一种更为安全的方法。

JSR还通过整合OIDC令牌和GitHub Actions,利用供应链安全技术来创建高级的、可验证的代码来源证明,并将其保存在Sigstore中。这样不仅保证了代码的真实性,也加强了对开发者责任的信任和确立。

JavaScript作为广泛使用的编程语言,其普遍性和易用性为其赢得了大量的使用者。一个中心化的社区对于JavaScript是必要的,开发者可以在这里共享他们的成果,而不会感到过于复杂。

我们坚信,JavaScript将继续在软件开发领域保持其核心地位,而JSR的设计正是为了支持这种持久的相关性。尽管JSR不是一个传统的包管理器,它提供了一种新的方法来管理和保护代码,致力于成为一个稳定且具有前瞻性的平台,旨在加强和保护JavaScript开发。

因此,JSR不仅仅是生态系统中的另一个工具,更是一种彻底改变我们如何分发JavaScript和TypeScript代码的根本性变革。
用户评论