Code前端首页关于Code前端联系我们

Node 删除 Corepack,Bun 从 JavaScript 运行原生 C

terry 6个月前 (10-17) 阅读数 224 #Web安全
文章标签 Corepack

在其他开发者新闻中,Next.js 将放宽对 Pages Router 的 React 19 要求,而 Astro 则添加了一种管理内容的新方法。

image.png

Node.js 计划删除 Corepack,这是自 16.13.0 版本以来包含在 Node.js 中的工具。

Corepack 简化了跨项目管理不同 Node.js 版本和包管理器(如 npm、yarn 和 pnpm)的过程。它还提供了一种安装和使用这些工具的方法,无需担心兼容性问题或手动配置。

关于这一决定的来龙去脉,有一个不同寻常的故事,涉及计划默认启用 Corepack,然后突然改变主意,决定将其删除,Socket 的 Sarah Gooding 在 8 月分享了这一故事。YouTube 和前端开发人员 Theo Browne(又名Theo – t3.gg)分享了为什么删除 Corepack 对许多 Web 开发人员来说是一个令人失望的举动。开发人员可以不使用 npm,而直接使用 Corepack。但遗憾的是,那些日子已经一去不复返了。

古丁提到了网络开发人员尼克·里巴尔 (Nick Ribal)。

“我也对这种可悲的状况深感失望,”Ribal 说。“很多人出于很多正当理由选择不使用 npm。对于这群人来说,Corepack 简直就是一条生命线,而这个 PR 旨在切断它。这将是一次可怕的倒退,会伤害许多节点用户。它是一种积极的敌意,我希望更多的人意识到这一点。”

而做出这一决定的 PMWG(软件包维护工作组)成员则表示,Corepack 最好是独立发展,因为维护人员 — — 除极少数例外 — — “近十年来”都没有参加过与 PMWG 的会议,开发人员和开源维护者乔丹哈班德 (Jordan Harband)说道。

Bun 现在支持从 JavaScript 运行原生 C

Bun 1.1.28 版本提供了从 JavaScript 编译和运行原生 C 语言的实验性支持。

Bun 是集 JavaScript 运行时、打包器、测试运行器和包管理器于一体的程序。它将自己定位为 Node 的替代品。但添加从 JavaScript 编译和运行原生 C 的能力确实引出了一个问题:你为什么要这样做?

Bun 的创建者Jarred Sumner写道:“从压缩到加密,从网络到你正在阅读的 Web 浏览器,世界都运行在 C 语言之上。如果不是用 C 语言编写的,它就会使用 C ABI(C++、 Rust、Zig等)并可作为 C 库使用。C 和 C ABI 是系统编程的过去、现在和未来。”

“通过 C 对代码库的小部分进行微优化可能不会带来太大的性能提升,但很高兴被证明是错误的!”
—— Bun 的创造者 Jared Sumner

他说,这是使用JavaScript中的 C 库和系统库的低模板方法,并补充说,此功能允许运行 JavaScript 的同一项目也运行 C,而无需单独的构建步骤。

他引用的用例包括:

  • 该团队在最近的一篇博客文章中写道,通过避免生成新进程和为每个视频分配大量内存的开销,使用 ffmpeg 转换短视频的速度提高了三倍。

  • 使用 macOS Keychain API 安全地保存和加载密码。

“它非常适合将 C 或类似 C 的库绑定到 JavaScript 的粘合代码。有时,你想在 JavaScript 中使用 C 库或系统 API,而该库从来就不是为在 JavaScript 中使用的,”Sumner 补充道。

该团队解释道,目前可以通过编译为WebAssembly或编写 N-API (napi) 插件或 V8 C++ API 库插件来实现这一点。但这两种方法都不是最佳的,Sumner 解释道。

他指出,编写 N-API 或其他插件并不是最理想的,因为编译本机插件会破坏 CI,并且编译本机插件对于维护人员来说很复杂,而且性能也会降低 3 倍。

另一方面,WebAssembly 可以做到这一点,但其隔离内存模型存在严重的缺点,该团队写道,包括无法进行系统调用和需要克隆所有内容。

“现代处理器支持大约 280 TB 的可寻址内存(48 位)。WebAssembly 是 32 位的,只能访问自己的内存,”Sumner 写道。“这意味着默认情况下,传递字符串和二进制数据 JavaScript <=> WebAssembly 每次都必须克隆。对于许多项目来说,这抵消了利用 WebAssembly 带来的任何性能提升。”

周五发布的 Bun 最新版本在此基础上添加了对 cc 的 N-API (nap) 支持。

“这使得从 C 代码返回 JavaScript 字符串、对象、数组和其他非原始值变得更加容易,”Sumner 写道。“您可以继续使用 int、float、double 等类型从 C 代码发送和接收原始值,但现在您也可以使用 N-API 类型!此外,当使用 dlopen 加载带有 bun:ffi 的共享库(例如带有 C ABI 导出的Rust 或 C++库)时,此功能也有效。”

尽管如此,开发人员可能不想使用在 JavaScript 中运行 C 的能力来编译大型项目,例如PostgreSQL或SQLite,他补充道。

“TinyCC 编译后会生成性能不错的 C 语言,但它不会像 Clang 或 GCC 那样进行高级优化,比如自动矢量化或非常专业的 CPU 指令,”Sumner 写道。“通过 C 对代码库的小部分进行微优化可能不会带来太多性能提升,但很高兴被证明是错误的!”

Astro 5.0 Beta 版现已推出,包含内容层

专注于内容的 Web 框架Astro 本周发布了 5.0 版测试版,其中包含现已稳定的 Astro 内容层,它提供了一种处理内容的新方法。此测试版还创建了稳定的服务器岛,允许开发人员在网站页面上混合静态和个性化内容。

Astro 维护者Matt Kane在深入探讨内容层时写道,内容层是一种“组织本地内容的强大新方法”,采用类型安全构建,可扩展到数千页。

内容层将处理内容集合,该功能在 Astro 2 中引入,旨在“为 Markdown 和 MDX 等本地文件提供一流的开发人员体验”。但 Kane 指出,该功能在扩展方面存在困难,开发人员希望所有内容(包括远程 API)都能获得相同的优势。

根据团队成员 Erika 的帖子,服务器岛是建立在 Astro 现有岛屿架构之上的新基元。

“此功能对于页面上混合了动态和静态内容的内容驱动型网站特别有用,”Erika 写道。“例如,对于电子商务网站,您可以将产品推荐的呈现推迟到初始页面加载之后,从而提供更快的初始页面加载时间,同时仍提供个性化内容。”

此版本还将标记为稳定astro:env,这是管理环境变量的新方法。Astro:env它是一个“内置模块,提供一种类型安全的方式来定义和访问环境变量”,她补充道。

最后,此更新添加了合并的静态和混合输出模式,这使得创建具有静态、缓存、高性能页面以及按需呈现的动态页面的网站变得更加容易,Erika 补充道。

“Astro 的新输出:默认模式‘静态’现在允许您通过添加适配器在服务器上运行时呈现单独的路由,无需其他配置,”她说。

Next.js 放宽 Pages Router 的 React 19 要求

Vercel 软件工程经理Jimmy Lai在推文中表示,Vercel 在 Next.js 15 金丝雀版本中改进了开发人员体验。特别是,他们致力于提高 Turbopack 的稳定性和性能,使其“使用起来非常愉快”,Lai 说。

他还指出,根据民意调查和与开发人员的对话,团队已决定做出一些改变以简化 Next 15 的采用。

首先,Next.js 将“放宽 Pages Router 的 React 19 要求,以便开发人员可以随时升级。”其次,对于应用路由器,团队不会阻止 React 19 GA 来将 Next 15 标记为稳定版本。

赖表示:“我们已经对其进行了广泛的测试,对它的稳定性很有信心。”

他总结道,最终候选版本应该会在几周内发布,其中包含“一些小的改动和错误修复”,之后会发布一个稳定的版本。

Vite 6.0.0 Beta 版发布,API 改进

根据最近的一条推文, Vite 团队正在寻求任何在开发服务器上进行构建并尝试其新模块运行器和环境 API 的人的反馈。

环境API在 Vite 5.1 中被引入,与“Vite 运行时 API”相同。它已被修订,并随 Vite 6 作为实验版本发布。

SolidHack 奖金总额 15,000 美元

Solid 团队表示,去年举办的首届 SolidHack 非常成功,因此决定第二年举办该活动。Solid团队本周宣布,今年的奖金总额为 15,000 美元。该活动将于 10 月 31 日开始,持续至 11 月 14 日。

“Solid 和生态系统已经相当成熟,SolidStart现已推出 1.0 版,”该团队写道。“我们为社区中的才华横溢的开发人员提供了一个绝佳的机会来展示他们的才华并赢得奖金。”

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门