当前位置: 首页 > news >正文

Bun 1.0 正式发布,爆火的前端运行时,速度遥遥领先!

文章目录

  • 一、包子1.0
  • 二、Bun 是一个一体化工具包
    • 为什么包子存在
  • 二、Bun 是一个 JavaScript 运行时
    • Node.js 兼容性
    • 速度
    • TypeScript 和 JSX 支持
    • ESM 和 CommonJS 兼容性
    • 网络 API
    • 热重载
    • 插件


在这里插入图片描述

一、包子1.0

Bun 1.0终于来了。

Bun 是一个快速、一体化的工具包,用于运行、构建、测试和调试 JavaScript 和 TypeScript,从单个文件到全栈应用程序。如今,Bun 已经稳定并可以投入生产。

二、Bun 是一个一体化工具包

我们喜欢 JavaScript。它成熟、发展迅速,并且其开发者社区充满活力和热情。这很棒。

然而,自从 Node.js 14 年前首次亮相以来,工具层层叠加。就像任何在没有集中规划的情况下成长和发展的系统一样,JavaScript 工具已经变得缓慢而复杂。

为什么包子存在

Bun 的目标很简单:消除缓慢和复杂性,同时又不放弃 JavaScript 的所有优点。您最喜欢的库和框架应该仍然可以工作,并且您不需要忘记您熟悉的约定。
然而,您需要忘记 Bun 使之变得不必要的许多工具:
Node.js — Bun 是 Node.js 的直接替代品,因此您不需要:

  • node

  • npx—bunx速度快 5 倍

  • dotenv, cross-env— Bun.env默认读取文件

  • nodemon, pm2— 内置观看模式

  • ws— 内置 WebSocket 服务器

  • node-fetch, isomorphic-fetch— 内置fetch
    转译器 — Bun 可以运行.js、.ts、.cjs、.mjs、.jsx和.tsx文件,它们可以替换:

  • tsc—(但您可以保留它以进行类型检查!)

  • babel, .babelrc,@babel/preset-*

  • ts-node,ts-node-esm

  • tsx
    捆绑器— Bun 是一个 JavaScript 捆绑器,具有一流的性能和与 esbuild 兼容的插件 API,因此您不需要:

  • esbuild

  • webpack

  • parcel,.parcelrc

  • rollup,rollup.config.js
    包管理器——Bun 是一个与 npm 兼容的包管理器,具有熟悉的命令。它读取您的package.json内容并写入node_modules,就像其他包管理器一样,因此您可以替换:

  • npm, .npmrc,package-lock.json

  • yarn,yarn.lock

  • pnpm, pnpm.lock,pnpm-workspace.yaml

  • lerna
    测试库— Bun 是一个与 Jest 兼容的测试运行器,支持快照测试、模拟和代码覆盖率,因此您不再需要:

  • jest,jest.config.js

  • ts-jest, @swc/jest,babel-jest

  • jest-extended

  • vitest,vitest.config.ts
    虽然这些工具本身(大部分)都很好,但将它们一起使用不可避免地会造成脆弱性和缓慢的开发人员体验。他们做很多多余的工作;当你运行时jest,你的代码将被各种工具解析3次以上!将所有东西缝合在一起所需的管道胶带、插件和适配器最终总是会磨损。

Bun 是一个单一的集成工具包,可以避免这些集成问题。该工具包中的每个工具都提供了一流的开发人员体验,从性能到 API 设计。

二、Bun 是一个 JavaScript 运行时

Bun 是一个快速的 JavaScript 运行时。其目标是让构建软件的体验更快、更少令人沮丧、更有趣。

Node.js 兼容性

Bun 是 Node.js 的直接替代品。这意味着现有的 Node.js 应用程序和 npm 包只能在 Bun 中运行。Bun 内置了对 Node API 的支持,包括:

  • 内置模块,如fs、path、 和net,
  • 全局变量如__dirname和process,
  • 以及 Node.js 模块解析算法。(例如node_modules)
    虽然与 Node.js完美兼容是不可能的——看看你node:v8——Bun 几乎可以在野外运行任何 Node.js 应用程序。

Bun 针对 npm 上最流行的 Node.js 包的测试套件进行了测试。Express、Koa 和 Hono 等服务器框架就可以正常工作。使用最流行的全栈框架构建的应用程序也是如此。总的来说,这些库和框架涉及 Node.js API 表面的每个重要部分。
在这里插入图片描述
使用 Next.js、Remix、Nuxt、Astro、SvelteKit、Nest、SolidStart 和 Vite 构建的全栈应用程序可以在 Bun 中使用。

注意 - 有关 Node.js 兼容性的详细分类,请查看:bun.sh/nodejs。

速度

Bun 速度很快,启动速度比 Node.js快4 倍。这种差异仅在运行 TypeScript 文件时才会被放大,该文件需要转译才能由 Node.js 运行。
在这里插入图片描述
Bun 运行“hello world”TypeScript 文件的速度比使用 Node.js 的 esbuild 快 5 倍。

与使用 Google V8 引擎构建的 Node.js 和其他运行时不同,Bun 是使用 Apple 的WebKit引擎构建的。WebKit 是为 Safari 提供支持的引擎,每天有数十亿台设备使用。它快速、高效,并且经过了数十年的实战考验。

TypeScript 和 JSX 支持

Bun 有一个嵌入运行时的 JavaScript 转译器。这意味着您可以运行 JavaScript、TypeScript 甚至 JSX/TSX 文件,无需依赖项。

bun index.ts
bun index.jsx
bun index.tsx

ESM 和 CommonJS 兼容性

从 CommonJS 到 ES 模块的过渡是缓慢且充满恐惧的。引入 ESM 后,Node.js 花了 5 年时间才在没有–experimental-modules标记的情况下支持它。无论如何,生态系统仍然充满了 CommonJS。

Bun 始终支持这两种模块系统。无需担心文件扩展名.jsvs .cjsvs .mjs,或包含"type": "module"在您的package.json.

您甚至可以在同一文件中import使用和require(), 。它就是有效的。

import lodash from "lodash";
const _ = require("underscore");

网络 API

Bun 内置了对浏览器中可用的 Web 标准 API 的支持,例如fetch、Request、Response、WebSocket和ReadableStream。

const response = await fetch("https://example.com/");
const text = await response.text();

您不再需要安装node-fetch和之类的软件包ws。Bun 的内置 Web API 以本机代码实现,比第三方替代方案更快、更可靠。

热重载

Bun 让您作为开发人员能够更轻松地提高工作效率。您可以运行 Bun 以–hot启用热重载,这会在文件更改时重新加载您的应用程序。

bun --hot server.ts

与硬重启整个进程的工具不同nodemon,Bun 会重新加载代码而不终止旧进程。这意味着 HTTP 和 WebSocket 连接不会断开,状态也不会丢失。
在这里插入图片描述

插件

Bun 的设计是高度可定制的。

您可以定义插件来拦截导入并执行自定义加载逻辑。插件可以添加对其他文件类型的支持,例如.yaml或.png. 插件API的灵感来自 esbuild,这意味着大多数 esbuild 插件只能在 Bun 中工作。

import { plugin } from "bun";plugin({name: "YAML",async setup(build) {const { load } = await import("js-yaml");const { readFileSync } = await import("fs");build.onLoad({ filter: /.(yaml|yml)$/ }, (args) => {const text = readFileSync(args.path, "utf8");const exports = load(text) as Record<string, any>;return { exports, loader: "object" };});},
});

相关文章:

Bun 1.0 正式发布,爆火的前端运行时,速度遥遥领先!

文章目录 一、包子1.0二、Bun 是一个一体化工具包为什么包子存在 二、Bun 是一个 JavaScript 运行时Node.js 兼容性速度TypeScript 和 JSX 支持ESM 和 CommonJS 兼容性网络 API热重载插件 一、包子1.0 Bun 1.0终于来了。 Bun 是一个快速、一体化的工具包&#xff0c;用于运行…...

getchar函数设置为非阻塞

一. 前言 我们在学习C语言的时候&#xff0c;getchar都是阻塞的&#xff0c;等待用户输入字符并且输入回车后才返回。但是有时候我们希望把getchar设置为非阻塞&#xff0c;或者说&#xff0c;当我们遇到getchar函数变成非阻塞的了&#xff0c;我们应该怎么解决这个问题&#x…...

【超算作业调度系统--LSF】

集群服务器--LSF作业调度系统使用 0 Introdutction1 命令1.1 bsub--作业提交命令1.1.1 $ bqueues --查看现有队列信息&#xff1b;1.1.2 $lsload --查看各节点运行情况1.1.3 $bhosts --查看各节点空闲情况1.1.4 $busers --查看用户信息1.2 bsub --提交作业1.2.1 bsub OMP_NUM_T…...

L1-011 A-B分数 20

本题要求你计算A−B。不过麻烦的是&#xff0c;A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉&#xff0c;剩下的字符组成的就是字符串A−B。 输入格式&#xff1a; 输入在2行中先后给出字符串A和B。两字符串的长度都不超过104&#xff0c;并且保证每个字符…...

PHPword解析内容支撑

因有些功能不支持&#xff0c;所以新增了某些功能&#xff0c;以防后期变动不好变更&#xff0c;手动做个记录 将公式替换成指定的符号&#xff0c;读取到 html 后读取 xml 解析公式&#xff0c;根据标记符号进行替换 文件名PhpOffice\PhpWord\Shared\XMLReader.php public fun…...

回归预测 | MATLAB实现RUN-XGBoost龙格库塔优化极限梯度提升树多输入回归预测

回归预测 | MATLAB实现RUN-XGBoost多输入回归预测 目录 回归预测 | MATLAB实现RUN-XGBoost多输入回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现RUN-XGBoost多输入回归预测&#xff08;完整源码和数据&#xff09; 1.龙格库塔优化XGBoost&#xff0c;…...

LLM-TAP随笔——语言模型训练数据【深度学习】【PyTorch】【LLM】

文章目录 3、语言模型训练数据3.1、词元切分3.2、词元分析算法 3、语言模型训练数据 数据质量对模型影响非常大。 典型数据处理&#xff1a;质量过滤、冗余去除、隐私消除、词元切分等。 训练数据的构建时间、噪音或有害信息情况、数据重复率等因素都对模型性能有较大影响。训…...

Linux- open() lseek()

文件描述符 文件描述符&#xff08;File Descriptor&#xff0c;简称 FD&#xff09;是 UNIX 和 UNIX-like 系统中用于代表和识别打开的文件或其他I/O资源的一种抽象标识。它是一个非负整数&#xff0c;内部由操作系统进行管理和分配。文件描述符可以代表文件、套接字、管道等…...

Halcon Tuple相关算子(一)

(1) tuple_length( : : Tuple : Length) 功能&#xff1a;返回输入元组中元素的个数。 控制输入参数&#xff1a; Tuple&#xff1a;输入元组&#xff1b; 控制输出参数&#xff1a;length&#xff1a;输入元组中元素的个数。 (2) tuple_find( : : Tuple, ToFind : Indices…...

基于图像形态学处理的路面裂缝检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...................................................... %1&#xff1a;从文件夹中读取多个…...

PY32F003F18之窗口看门狗

一、PY32F003F18窗口看门狗特点&#xff1a; 即使窗口看门狗被禁止&#xff0c;窗口看门狗的"递减计数器"也会继续递减计数。 二、窗口看门狗复位的条件&#xff1a; 1、将"控制寄存器WWDG_CR"中的WDGA1,激活"窗口看门狗计数器等于0x3F"时,则产…...

SpingBoot:整合Mybatis-plus+Druid+mysql

SpingBoot&#xff1a;整合Mybatis-plusDruid 一、特别说明二、创建springboot新工程三、配置3.1 配置pom.xml文件3.2 配置数据源和durid连接池3.2.1 修改application.yml3.2.2 新增mybatis-config.xml 3.3 编写拦截器配置类 四、自动生成代码五、测试六、编写mapper.xml&#…...

计算机视觉与深度学习-经典网络解析-VGG-[北邮鲁鹏]

目录标题 VGG参考VGG网络贡献使用尺寸更小的$3 \times 3$卷积串联来获得更大的感受野放弃使用$11 \times 11$和$5 \times 5$这样的大尺寸卷积核深度更深、非线性更强&#xff0c;网络的参数也更少&#xff1b;去掉了AlexNet中的局部响应归一化层(LRN)层。 网络结构主要改进输入…...

入门级制作电子期刊的网站推荐

随着数字化时代的到来&#xff0c;越来越多的人开始尝试制作自己的电子期刊。如果你也是其中的一员&#xff0c;那么这篇文章可以帮助你制作电子期刊。无论是初学者还是有一定经验的制作者&#xff0c;都能快速完成高质量的电子期刊制作 小编经常使用的工具是-----FLBOOK在线制…...

软件测试内容整理

1. 软件测试 1.1. 定义 软件测试&#xff08;英语&#xff1a;Software Testing&#xff09;&#xff0c;描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说&#xff0c;软件测试是一种实际输出与预期输出之间的审核或者比较过程。 软件测试的经典定…...

UniAccess Agent卸载

异常场景&#xff1a; UniAccess Agent导致系统中的好多设置打不开 例如:ipv4的协议,注册表,host等等 需要进行删除,亲测有效,及多家答案平凑的 借鉴了这位大神及他里面引用的大神的内容 https://blog.csdn.net/weixin_44476410/article/details/121605455 问题描述 这个进…...

【C++】C++11——构造、赋值使用条件和生成条件

移动构造和移动赋值生成条件移动构造和移动赋值调用逻辑强制生成默认函数的关键字default禁止生成默认函数的关键字delete 移动构造和移动赋值生成条件 C11中新增的移动构造函数和移动赋值函数的生成条件为&#xff1a; 移动构造函数的生成条件&#xff1a;没有自己实现的移动…...

【LeetCode热题100】--56.合并区间

56.合并区间 排序&#xff1a; 如果按照区间的左端点排序&#xff0c;那么在排完序的列表中&#xff0c;可以合并的区间一定是连续的&#xff0c;如下图所示&#xff0c;标记为蓝色、黄色和绿色的区间分别可以合并为一个大区间&#xff0c;它们在排完序的列表中是连续的 算法&a…...

opencv dnn模块 示例(17) 目标检测 object_detection 之 yolo v5

在前文【opencv dnn模块 示例(16) 目标检测 object_detection 之 yolov4】介绍的yolo v4后的2个月&#xff0c;Ultralytics发布了YOLOV5 的第一个正式版本&#xff0c;其性能与YOLO V4不相伯仲。 文章目录 1、Yolo v5 和 Yolo v4 的区别说明1.1、Data Augmentation - 数据增强1…...

关于安卓SVGA浅尝(一)svgaplayer库的使用

关于安卓SVGA浅尝&#xff08;一&#xff09;使用 相关链接 SVGA官网 SVGA-github说明文档 背景 项目开发&#xff0c;都会和动画打交道&#xff0c;动画的方案选取&#xff0c;就有很多选择。如Json动画&#xff0c;svga动画&#xff0c;gif等等。各有各的优势。目前项目中…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...