Bendi新闻
>
Bun 为 JavaScript 和 TypeScript 开发者提供了一个跨平台的 Shell

Bun 为 JavaScript 和 TypeScript 开发者提供了一个跨平台的 Shell

作者 | Agazi Mekonnen
译者 | 平川
策划 | Tina

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 翻译整理,未经许可禁止转载。

今日好文推荐

我在技术面试中用 ChatGPT 作弊,没人知道

零一万物刷榜,Zilliz 呛声:面向投资人编程;李彦宏称“程序员将会消失”,周鸿祎回怼;TikTok 危在旦夕 | Q资讯

敲了17年代码,我现在连个面试机会都得不到

“微软已经沦落为 OpenAI 的一个 IT 部门”!资源倾斜引发微软内部员工不满、高管离职

微信扫码关注该文公众号作者

来源:InfoQ
logo
联系我们隐私协议©2024 bendi.news
Bendi新闻
Bendi.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Bendi.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。