Bun 为 JavaScript 和 TypeScript 开发者提供了一个跨平台的 Shell
Bun 首席执行官兼创始人 Jarred Sumner 最近宣布了 Bun Shell。这是一个面向 JavaScript 和 TypeScript 开发人员的跨平台 Shell。Bun Shell 旨在简化 JavaScript 和 TypeScript 中 shell 脚本的执行。它提供了一个类似 bash 的环境,其中包含了诸如文件名通配(globbing)、环境变量、重定向和管道等特性。该版本相当于 alpha 版,将来可能会有破坏性更改。
对于开发人员来说,在 Node.js 中整合 shell 命令并不总是那么简单。虽然 child_process 模块很实用,但它存在安全风险,特别是在处理未经处理的用户输入时,并且易用性比较差。另一方面,fs/promise 模块提供了异步文件系统操作,但它不能直接替代常见的 shell 命令。为了弥补这一差距,开发社区转向了 shelljs、rimraf 等包。
Bun Shell API 引入了一系列旨在增强脚本编写体验的特性。首先,它确保了跨平台兼容性,在 Windows、Linux 或 macOS 上使用时不需要额外的依赖。此外,它采用了类似 bash 的环境,提供了熟悉的语法,与 shell 脚本中的既有约定保持一致。目前,它原生支持“ls”、“cd”和“rm”等基本命令。它还原生支持 glob 模式,包括 **、*、{expansion}等,增强了命令创建的灵活性。Bun Shell 中的模板字面量允许执行带有简单变量和表达式插值的 shell 命令。出于安全考虑,在默认情况下,所有字符串都会被转义,从而降低 shell 注入攻击的风险。
Sumner 着重强调了 Bun Shell 的广泛用途和特性,他说:
它适用于 Windows、macOS 和 Linux。我们已经实现了许多常见的命令和特性,诸如文件名通配(globbing)、环境变量、重定向和管道等等。JavaScript 插值是另一个值得注意的特性,它支持使用 Response、ArrayBuffer、Blob、burn .file(path) 和其他 JavaScript 对象作为 stdin、stdout 和 stderr。这种集成让它可以在脚本中使用不同的数据类型。
让我们从最基本的功能开始,比如回显消息,可以用模板字符串标签 $ 实现:
import { $ } from "bun";
await $`echo "Hello World!"`; // Hello World!
将输出作为文本来访问也很简单,使用.text() 方法即可:
import { $ } from "bun";
const result = await $`echo "Hello World!" | wc -w`.text();
console.log(result); // 2
在 Reddit 上有一个帖子讨论最近发布的 Bun Shell,其中,用户 u/nonlogin 提了一个问题:
它与 xz 相比如何?
u/TheUnlocked 在回复时着重描述了 Bun Shell 和 zx 之间的差异:
看起来 Bun 的版本是一个全新的 shell,语法与 bash 相似(但它是跨平台的,并且有一些很棒的特性,如允许重定向到缓冲区),而 zx 只是调用现有 shell 的一种更简单、更安全的方式。Bun Shell API 借鉴了 zx、dax 和 bnx。
原文链接:
https://www.infoq.com/news/2024/02/bun-announces-bun-shell/
声明:本文为 InfoQ 翻译整理,未经许可禁止转载。
零一万物刷榜,Zilliz 呛声:面向投资人编程;李彦宏称“程序员将会消失”,周鸿祎回怼;TikTok 危在旦夕 | Q资讯
微信扫码关注该文公众号作者