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

news2024/12/24 22:13:47

文章目录

  • 一、包子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" };
    });
  },
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1036283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云原生微服务治理:服务发现、负载均衡与熔断策略

文章目录 什么是云原生微服务治理&#xff1f;服务发现客户端发现服务器端发现 负载均衡Ribbon - 基于客户端的负载均衡Nginx - 基于服务器的负载均衡 熔断策略Hystrix - 熔断器模式 结论 &#x1f389;欢迎来到云计算技术应用专栏~云原生微服务治理&#xff1a;服务发现、负载…

【AI视野·今日Robot 机器人论文速览 第三十九期】Fri, 22 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Fri, 22 Sep 2023 Totally 39 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers ForceSight: Text-Guided Mobile Manipulation with Visual-Force Goals Authors Jeremy A. Collins, Cody Houff, You Liang …

【项目】在线音乐播放器测试报告

目录 项目背景 项目功能 测试计划 功能测试 登录页面的测试 测试用例 测试结果 注册页面的测试 测试用例 测试结果 音乐列表页面的测试 测试用例 测试结果 出现的bug 搜索功能的bug 问题解决 删除功能的bug 问题解决 喜欢列表页面的测试 测试用例 测试结果…

【Web3】DAO相关的基础知识

这里写目录标题 DAO 的基础概念为什么需要 DAO&#xff1f;DAO 的种类 DAO 的运作方式知名 DAO 的介绍Bankless DAOSeeDAO DAO 的生态全景图分类治理框架DAO 的工具 DAO 众筹平台介绍 - JuiceBoxDAO 投票治理介绍 - SnapshotDAO 贡献 & 激励 - POAPDAO 信息管理 - NotionDA…

2023手把手教授neo4j安装及环境配置

安装包下载&#xff1a; 首先进入Neo4j官网&#xff1a;Neo4j Graph Database & Analytics | Graph Database Management System 在上方选择栏中选择“Products”&#xff0c;在其中选择“Deployment Center”&#xff0c;点击“Download Neo4j to get started” 然后往下…

qt操作sqlite数据库

有两种方法&#xff0c;一种使用qt中的QSqlDatabase模块&#xff0c;另一种使用sqlite3提供的c/c接口。 其中第一种需要需要在工程下的.pro文件中加入“QT sql”&#xff0c;在qt安装目录对应的编译器下的plugins目录中要有sqldrivers文件夹 第二种方法需要在sqlite官网&am…

umi+react+dva简单搭建一个项目框架(配置layout、antd、路由等)

目录 umireactdva简单搭建一个项目框架(配置layout、antd、路由等)创建项目引入antd抽离配置 config01: config / config.js02: config / router / router.js03&#xff1a;配置layout03_1 config.js03_2 router.js效果 umireactdva简单搭建一个项目框架(配置layout、antd、路由…

Vue系列(三)之 基础语法下篇【事件处理,表单综合案例,组件通信】

一. 事件处理 在 Vue.js 中&#xff0c;v-on 指令被用于监听 DOM 事件&#xff0c;并在事件触发时执行相应的方法&#xff0c;这些方法就是事件处理器。v-on 指令有简写形式 &#xff0c;例如 click"handleClick" 会监听点击事件并执行 handleClick 方法。 事件处理…

视频剪辑软件Premiere Pro 2022 mac(pr2022) v22.6.2中文版

Premiere Pro 2022 mac不仅可以帮助用户对各种视频进行剪辑、旋转、分割、合并、字幕添加、背景音乐等基础的处理&#xff0c;pr2022 mac还能帮助用户进行视频颜色校正、颜色分级、稳定镜头、调整层、更改片段的持续时间和速度、效果预设等操作&#xff0c;功能强大。 ​Premie…

服务注册发现_什么是服务治理

为什么需要服务治理 在没有进行服务治理前,服务之间的通信是通过服务间直接相互调用来实现的。 过程&#xff1a; 武当派直接调用峨眉派和华山派&#xff0c;同样&#xff0c;华山派直接调用武当派和峨眉派如果系统不复杂&#xff0c;这样调用没什么问题。但在复杂的微服务系统…

七、高斯朴素贝叶斯算法(Gaussian NB,Gaussian Naive Bayes)(有监督学习)

高斯朴素贝叶斯Gaussian Naive Bayes (GaussianNB). 可通过 partial_fit 对模型参数进行在线更新 一、算法思路 所谓高斯贝叶斯指的便是假定样本每个特征维度的条件概率均服从高斯分布&#xff0c;进而再根据贝叶斯公式来计算得到新样本在某个特征分布下其属于各个类别的后验…

计算机组成原理之硬件的基本组成,深入介绍两大计算机结构体系,从底层出发认识计算机。

大家好&#xff0c;欢迎阅读《计算机组成原理》的系列文章&#xff0c;本系列文章主要的内容是从零学习计算机组成原理&#xff0c;内容通俗易懂&#xff0c;大家好好学习吧&#xff01;&#xff01;&#xff01; 更多的优质内容&#xff0c;请点击以下链接查看哦~~ ↓ ↓ ↓ …

【Log】为类中的所有日志打印添加前缀

文章目录 前言验证探索后记 前言 有没有一种办法&#xff0c;在一个类中(业务逻辑)。logger.info 的时候自动加上日志前缀&#xff0c;这样子查日志更方便。stackoverflow 上面有对该问题的讨论&#xff0c;实测可用&#xff0c;这里记录一下。 来自stackoverflow 简洁可用的…

离线部署 python 3.x 版本

文章目录 离线部署 python 3.x 版本1. 下载版本2. 上传到服务器3. 解压并安装4. 新建软连信息5. 注意事项 离线部署 python 3.x 版本 1. 下载版本 python 各版本下载地址 本次使用版本 Python-3.7.0a2.tgz # linux 可使用 wget 下载之后上传到所需服务器 wget https://www.py…

使用Go开源的一款性能监控软件,开箱即用,自动化图表生成

使用Go开源的一款性能监控软件&#xff0c;开箱即用&#xff0c;自动化图表生成。 uptrace介绍 uptrace是一体化工具&#xff0c;优化性能并监视错误和日志的开源监控系统。Uptrace是一个经济高效的跟踪解决方案&#xff0c;可帮助您监控、了解和优化复杂的分布式系统。对您的…

运行springBoot项目

本文背景&#xff1a;接手后端Maven管理的springBoot项目&#xff0c;但是不太清楚具体怎么运行项目 写此文章作为纪念 参考链接&#xff1a;IDEA运行SpringBoot项目&#xff08;图文详细讲解&#xff09;_idea项目运行_叫我小楠的博客-CSDN博客 步骤如下&#xff1a; 1.设…

3D打印预处理软件——CHITUBOX Pro 1.4.1

CHITUBOX PRO登场 革命性的3D打印数据处理软件&#xff0c;让你发挥3D打印的无限潜力 支持多种主流CAD文件格式 除了传统的stl和obj文件&#xff0c;CHITUBOX Pro还支持导入各种主流的CAD文件格式&#xff0c;包括3ds、3mf、3dm、stp、step、wrl、x3d、sat、sab、dae、dxf、f…

uniapp合法域名配置

首先打开微信开发者平台 找到开发管理 打开开发设置 找到服务器域名>修改 request 写入域名前缀即可 > 完成 重启小程序即可 感谢观看

React redux更新数据的诡异特征==》彻底掌握redux更新state机制的精髓

此文章是跟随我上一篇文章《Redux Toolkit中action派发但state值不更新的原因》写的。 本来一切都搞定了&#xff0c;此时我突发奇想&#xff1a; 如果让api服务端不发送包含x-pagination的header信息&#xff0c;web端会不会报错。因为按照web端 redux原有的逻辑&#xff1a;…

【PowerShell】PowerShell的Core版本的额外配置

在PowerShell 7.1 安装完成后,默认情况下打开PowerShell 会直接进入到系统内置的PowerShell,如果希望通过远程连接或者PowerShell Web Access 进入到PowerShell 7环境的界面,就需要进行环境的再配置才能实现PowerShell 7.1 的环境连接。需要为外部的环境提供连接的话需要按照…