国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Bun 1.0 正式發布,爆火的前端運行時,速度遙遙領先!

開發 前端
前端運行時 Bun 1.0 正式發布,如今,Bun 已經穩定并且適用于生產環境。Bun 不僅是一個專注性能與開發者體驗的全新 JavaScript 運行時,還是一個快速的、全能的工具包,可用于運行、構建、測試和調試JavaScript和TypeScript代碼,無論是單個文件還是完整的全棧應用。

9 月 8 日,前端運行時 Bun 1.0 正式發布,如今,Bun 已經穩定并且適用于生產環境。Bun 不僅是一個專注性能與開發者體驗的全新 JavaScript 運行時,還是一個快速的、全能的工具包,可用于運行、構建、測試和調試JavaScript和TypeScript代碼,無論是單個文件還是完整的全棧應用。

2022 年 7 月,Bun 發布,隨即爆火,成為年度最火的前端項目:

Bun 的流行程度伴隨著在去年夏天發布的第一個 Beta 版而爆炸性增長:僅一個月內,就在 GitHub 上獲得了超過兩萬顆 Star。

Bun 不僅僅是一個運行時。它也是:

  • 一個包管理器 (類似 Yarn、 NPM、 PNPM)
  • 一個構建工具 (類似 Webpack、 ESBuild、 Parcel)
  • 一個測試運行器
  • ...

所以 Bun 可以通過讀取 package.json 來安裝依賴項。Bun 還可以運行腳本。不管它做什么都比其他工具更快。Bun 在 JavaScript 生態系統的許多方面都有新的嘗試,其中的重點是性能。它優先支持標準的 Web API,如 Fetch。它也支持許多 Node.js APIs,使其能與大多數 NPM 包兼容。

安裝 Bun:

// npm
npm install -g bun

// brew
brew tap oven-sh/bun
brew install bun

// curl
curl -fsSL https://bun.sh/install | bash

// docker
docker pull oven/bun
docker run --rm --init --ulimit memlock=-1:-1 oven/bun

更新 Bun:

bun upgrade

下面就來看看 Bun 是什么,1.0 版本帶來了哪些更新!

Bun:全能的工具包

JavaScript 成熟、發展迅速,并且有著充滿活力和激情的開發者社區。然而,自14年前Node.js發布以來,JavaScript 的工具鏈變得越來越龐大和復雜。這是因為在發展過程中,各種工具被逐漸添加進來,但沒有一個統一的集中規劃,導致工具鏈缺乏整體性和效率,變得運行緩慢和復雜。

Bun 為什么會出現?

Bun的目標很簡單,就是要消除JavaScript工具鏈的緩慢和復雜性,但同時保留JavaScript本身的優點。Bun希望讓開發者繼續使用喜歡的庫和框架,并且無需放棄已經熟悉的規范和約定。

為了實現這個目標,可能需要放棄一些在使用Bun之后變得不再必要的工具:

  • Node.js:Bun 的一個可以直接替代的工具,因此不再需要以下工具:
  • node
  • npx:Bun 的 bunx 命令比 npx 快5倍。
  • nodemon:Bun 內置了監聽模式,無需使用 nodemon。
  • dotenv、cross-env:Bun 默認支持讀取.env文件的配置。

轉譯器:Bun 可以運行.js、.ts、``.cjs、.mjs、.jsx和.tsx文件,因此不再需要以下工具:

  • tsc:仍然可以保留它用于類型檢查!
  • babel、.babelrc、@babel/preset-*:不再需要使用 Babel 進行轉譯。
  • ts-node、ts-node-esm:Bun 可以直接運行 TypeScript 文件。
  • tsx:Bun可以直接運行 TypeScript 的 JSX 文件。
  • 構建工具:Bun 具有一流的性能和與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
  • lern
  • 測試庫:Bun是一個支持Jest的測試運行器,具有快照測試、模擬和代碼覆蓋率等功能,因此不再需要以下測試相關的工具:
  • jest, jest.config.js
  • ts-jest, @swc/jest, babel-jest
  • jest-extended
  • vitest, vitest.config.ts

盡管這些工具都有自己的優點,但使用它們時往往需要將它們全部集成在一起,這會導致開發過程變得緩慢和復雜。而Bun通過成為一個單一的工具包,提供了最佳的開發者體驗,從性能到API設計都力求做到最好。

Bun:JavaScript 運行時

Bun是一個快速的JavaScript運行時。旨在提供出色的性能和開發體驗。它的設計旨在解決開發過程中的各種痛點,使開發者的工作更加輕松和愉快。

與Node.js兼容

Bun 是可以直接替代 Node.js 的。這意味著現有的 Node.js 應用和 npm 包可以在 Bun 中正常工作。Bun 內置了對 Node.js API 的支持,包括:

  • 內置模塊,如fs、path和net
  • 全局對象,如__dirname和process
  • Node.js 模塊解析算法(例如node_modules)

盡管與 Node.js 完全兼容是不可能的,特別是一些依賴于v8版本的特性,但 Bun 幾乎可以運行任何現有的 Node.js 應用。

Bun經過了與最受歡迎的Node.js包的兼容性測試,支持與Express、Koa、Hapi等服務端框架以及其他流行的全??蚣艿臒o縫集成。開發者可以放心地在Bun中使用這些庫和框架,并享受到更好的開發體驗。

使用Next.js、Remix、Nuxt、Astro、SvelteKit、Nest、SolidStart和Vite構建的全棧應用可以在Bun中運行。

速度

Bun的速度非常快,啟動速度比 Node.js 快 4 倍。當運行TypeScript文件時,這種差異會更加明顯,因為在Node.js中運行TypeScript文件需要先進行轉譯才能運行。

Bun在運行一個簡單的"Hello World" TypeScript文件時,比在Node.js中使用esbuild運行速度快5倍。

Bun使用的是Apple的WebKit引擎,而不是像Node.js和其他運行時一樣使用Google的V8引擎。WebKit引擎是Safari瀏覽器的核心引擎,每天被數十億的設備使用。它經過了長時間的實際應用和測試,具備快速和高效的特性。

TypeScript 和 JSX 支持

Bun內置了JavaScript轉譯器,因此可以運行JavaScript、TypeScript甚至JSX/TSX文件,無需任何依賴。

// 運行 TS 文件
bun index.ts

// 運行 JSX/TSX 文件
bun index.tsx

ESM 和 CommonJS 兼容

從CommonJS到ES模塊的過渡一直是緩慢而充滿挑戰的。在引入ESM之后,Node.js花了5年時間才在沒有--experimental-modules標志的情況下支持它。盡管如此,生態系統仍然充斥著CommonJS。

Bun 同時支持這兩種模塊系統。無論是使用CommonJS的.js擴展名、.cjs擴展名,還是使用ES模塊的.mjs擴展名,Bun都會進行正確的解析和執行,而無需額外的配置。

甚至可以在同一個文件中同時使用import和require():

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

Web 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 就會自動重新加載你的應用,從而提高開發效率。

bun --hot server.ts

與像nodemon這樣完全重新啟動整個進程的工具不同,Bun 在重新加載代碼時不會終止舊進程。這意味著HTTP和WebSocket連接不會斷開,并且狀態不會丟失。

插件

Bun 被設計為高度可定制的。 可以定義插件來攔截導入操作并執行自定義的加載邏輯。插件可以添加對其他文件類型的支持,比如.yaml或.png。插件API的設計靈感來自于esbuild,這意味著大多數esbuild插件在 sBun 中也可以正常工作。

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 API

Bun內部提供了針對開發者最常用需求的標準庫API,并對其進行了高度優化。與Node.js的API不同,Node.js的API存在著向后兼容的考慮,而Bun的原生API則專注于提供更快速和更易于使用的功能。

Bun.file()

使用Bun.file()可以懶加載位于特定路徑的文件。

const file = Bun.file("package.json");
const contents = await file.text();

它返回一個擴展了 Web 標準File的BunFile對象。文件內容可以以多種格式進行懶加載。

Bun.serve({
  port: 3000,
  fetch(request) {
    return new Response("Hello from Bun!");
  },
});

Bun每秒可以處理的請求比 Node.js 多 4 倍。

也可以使用tls選項來配置TLS(傳輸層安全協議)。

Bun.serve({
  port: 3000,
  fetch(request) {
    return new Response("Hello from Bun!");
  },
  tls: {
    key: Bun.file("/path/to/key.pem"),
    cert: Bun.file("/path/to/cert.pem"),
  }
});

Bun內置了對WebSocket的支持,只需要在websocket中定義一個事件處理程序來實現同時支持HTTP和WebSocket。而Node.js沒有提供內置的WebSocket API,所以需要使用第三方依賴庫(例如ws)來實現WebSocket的支持。因此,使用Bun可以更加方便和簡單地實現WebSocket功能。

Bun.serve({
  fetch() { ... },
  websocket: {
    open(ws) { ... },
    message(ws, data) { ... },
    close(ws, code, reason) { ... },
  },
});

Bun 每秒可以處理的消息比在 Node.js 上使用 ws 庫多 5 倍。

bun:sqlite

Bun內置了對 SQLite 的支持。它提供了一個受到better-sqlite3啟發的API,但是使用本地代碼編寫,以達到更快的執行速度。

import { Database } from "bun:sqlite";

const db = new Database(":memory:");
const query = db.query("select 'Bun' as runtime;");
query.get(); // => { runtime: "Bun" }

在 Node.js 上,Bun 執行 SQLite 查詢操作的速度比better-sqlite3快 4 倍。

Bun.password

Bun 還支持一些常見但復雜的API,不用自己去實現它們。

例如,可以使用Bun.password來使用bcrypt或argon2算法進行密碼哈希和驗證,無需外部依賴。

const password = "super-secure-pa$$word";
const hash = await Bun.password.hash(password);
// => $argon2id$v=19$m=65536,t=2,p=1$tFq+9AVr1bfPxQdh...

const isMatch = await Bun.password.verify(password, hash);
// => true

Bun:包管理器

Bun是一個包管理器。即使不使用Bun作為運行時環境,它內置的包管理器也可以加速開發流程。以前在安裝依賴項時需要盯著npm的加載動畫,現在可以通過Bun的包管理器更高效地進行依賴項的安裝。

Bun可能看起來像你熟悉的包管理器:

bun install
bun add <package> [--dev|--production|--peer]
bun remove <package>
bun update <package>

安裝速度

Bun的安裝速度比 npm、yarn 和 pnpm 快好幾個數量級。它利用全局模塊緩存來避免從npm注冊表中重復下載,并使用每個操作系統上最快速的系統調用。

運行腳本

很可能你已經有一段時間沒有直接使用 Node 來運行腳本了。相反,通常使用包管理器(如npm、yarn等)與框架和命令行界面(CLI)進行交互,以構建應用。

npm run dev

可以用bun run來替換npm run,每次運行命令都能節省 150 毫秒的時間。

這些數字可能看起來很小,但在運行命令行界面(CLI)時,感知上的差異是巨大的。使用"npm run"會明顯感到延遲:

而使用bun run則感覺幾乎瞬間完成:

并不只是針對npm進行比較。實際上,bun run <command>的速度比yarn和pnpm中相應的命令更快。

腳本運行

平均時間

npm run

176ms

yarn run

131ms

pnpm run

259ms

bun run

7ms ??

Bun:測試運行器

如果你以前在 JavaScript 中寫過測試,可能了解 Jest,它開創了“expect”風格的API。

Bun有一個內置的測試模塊bun:test,它與Jest完全兼容。

import { test, expect } from "bun:test";

test("2 + 2", () => {
  expect(2 + 2).toBe(4);
});

可以使用bun test命令來運行測試:

bun test

還將獲得 Bun 運行時的所有優勢,包括TypeScript和JSX支持。

從Jest或Vite遷移很簡單。@jest/globals或vitest的任何導入將在內部重新映射到bun:test,因此即使不進行任何代碼更改,一切也將正常運行。

import { test } from "@jest/globals";

describe("test suite", () => {
  // ...
});

在與 zod 的測試套件進行基準測試中,Bun比Jest快13倍,比Vite快8倍。

Bun的匹配器由快速的原生代碼實現,Bun中的expect().toEqual()比Jest快100倍,比Vite快10倍。

可以使用bun test命令來加快 CI 構建速度,如果在Github Actions中,可以使用官方的oven-sh/setup-bun操作來設置Bun。

name: CI
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: oven-sh/setup-bun@v1
      - run: bun test

Bun會自動為測試失敗的部分添加注釋,以便在持續集成(CI)日志中更容易理解。這樣,當出現測試失敗時,可以直接從日志中讀取Bun提供的注釋,而不需要深入分析代碼和測試結果,從而更方便地檢查問題所在。

Bun:構建工具

Bun是一個JavaScript和TypeScript的構建工具和代碼壓縮工具,可用于將代碼打包成適用于瀏覽器、Node.js和其他平臺的形式。

bun build ./index.tsx --outdir ./build

Bun 受到了 esbuild 的啟發,并提供了兼容的插件API。

import mdx from "@mdx-js/esbuild";

Bun.build({
  entrypoints: ["index.tsx"],
  outdir: "build",
  plugins: [mdx()],
});

Bun 的插件 API 是通用的,這意味著它適用于打包工具和運行時。所以前面提到的.yaml插件可以在這里使用,以支持在打包過程中導入.yaml文件。

根據esbuild的基準測試,Bun比esbuild快1.75倍,比Parcel 2快150倍,比Rollup + Terser快180倍,比Webpack快220倍。

由于Bun的運行時和打包工具是集成在一起的,這意味著Bun可以做其他打包工具無法做到的事情。

Bun引入了JavaScript宏機制,可以在打包時運行JavaScript函數。這些函數返回的值會直接內聯到打包文件中。

// release.ts
export async function getRelease(): Promise<string> {
  const response = await fetch(
    "https://api.github.com/repos/oven-sh/bun/releases/latest"
  );
  const { tag_name } = await response.json();
  return tag_name;
}
// index.ts
import { getRelease } from "./release.ts" with { type: "macro" };

// release的值是在打包時進行評估的,并且內聯到打包文件中,而不是在運行時執行。
const release = await getRelease();
bun build index.ts
// index.ts
var release = await "bun-v1.0.0";

Bun:可以做更多事

Bun 在 macOS 和 Linux 上提供了原生構建支持,但 Windows 一直是一個明顯的缺失。以前,在 Windows 上運行 Bun 需要安裝 Windows 子系統來運行Linux系統,但現在不再需要。

Bun 首次發布了一個實驗性的、專為Windows平臺的本地版本的 Bun。這意味著Windows用戶現在可以直接在其操作系統上使用 Bun,而無需額外的配置。

盡管Bun的macOS和Linux版本已經可以用于生產環境,但Windows版本目前仍然處于高度實驗階段。目前只支持JavaScript運行時,而包管理器、測試運行器和打包工具在穩定性更高之前都將被禁用。性能方面也還未進行優化。

Bun:面向未來

Bun 1.0 只是一個開始。Bun 團隊正在開發一種全新的部署JavaScript和TypeScript到生產環境的方式,期待 Bun 未來更好的表現!

責任編輯:姜華 來源: 前端充電寶
相關推薦

2025-12-04 00:12:00

2013-11-27 09:36:31

Forrester惠普私有云服務

2023-12-07 11:38:25

2023-10-04 17:41:39

編程習慣代碼

2023-08-31 10:04:02

Astro 3.0前端

2025-04-03 10:21:32

2009-04-23 08:43:39

Iphone蘋果移動OS

2023-12-18 07:18:51

SREDevOps工具

2012-01-12 16:19:18

曙光

2024-06-07 11:14:24

2018-03-02 10:03:36

瀏覽器Chrome 微軟

2009-08-31 23:02:13

IT運維管理馬來西亞分公司摩卡軟件

2023-10-30 07:13:56

2015-02-26 13:30:14

2021-03-10 13:59:32

以太坊數據網絡

2018-11-02 15:24:51

SSD金士頓閃存

2017-04-13 08:49:16

SQLHive改進

2023-08-04 06:54:38

IntelCEONVIDIA

2025-09-24 08:12:11

2023-03-28 09:34:33

華為充電樁充電站
點贊
收藏

51CTO技術棧公眾號

欧美不卡一区二区三区| 日韩色妇久久av| 欧美大片免费高清观看| 午夜免费久久看| 精品99在线视频| 免费不卡在线观看| 久久精品欧美| 日韩视频中文| 国产精品theporn88| 欧美疯狂party性派对| 97国产精品久久| 亚洲福利合集| 色777狠狠综合秋免鲁丝| 美女扒开腿让男人桶爽久久软| 欧美日韩一级黄| 成人亚洲综合天堂| 欧美视频在线观看一区| 成人高清免费在线播放| 日韩欧美亚洲成人| 777电影在线观看| 91精品国产aⅴ一区二区| 国产在线更新| 欧美大胆人体bbbb| 色戒汤唯在线| 亚洲午夜av电影| 91成人抖音| 久久av资源网站| 国产精品中文字幕制服诱惑| 国产91精品久久久久| 精品国产一区二区三区av片| 成人免费高清完整版在线观看| 亚洲综合色网| 欧洲在线视频一区| 国产精品一区二区在线看| 成 年 人 黄 色 大 片大 全| 久久亚洲一级片| 高清毛片aaaaaaaa**| 欧美日韩美女视频| 国产精品va在线观看视色| 亚洲精品福利视频| 欧美日韩精品一区二区三区视频| 久久亚洲精品一区| 麻豆视频一区| 高清日韩一区| 国内精品久久久久影院色| 国产极品在线视频| 亚洲精品久久久蜜桃| 成年网站在线| 亚洲性无码av在线| jiujiure精品视频播放| 精品一区二区不卡| 99视频一区二区三区| 成人a视频在线| 日韩精品中文字幕在线不卡尤物| www.成人在线视频| 欧美中文字幕在线播放| 妖精视频成人观看www| 97在线国产视频| 亚洲一区二区三区四区在线免费观看 | 97中文字幕| 欧洲视频一区二区| 暖暖成人免费视频| 51精品国产黑色丝袜高跟鞋| 最新国产精品久久久| 偷拍视频一区二区| 国产欧美精品一区aⅴ影院 | 国产精品一区二| 成人一区二区三区在线观看| 国产激情二区| 亚洲第一色中文字幕| 亚洲春色h网| 日本成人三级电影网站| 国产欧美一区二区精品久导航 | 国产精品成人国产| 国产精品日日摸夜夜添夜夜av| 奇米精品一区二区三区在线观看一 | 一区二区视频在线看| 污影院在线观看| 欧美精品久久久久久久| 99在线观看免费视频精品观看| 国产无套内射久久久国产| 欧美日韩国产精选| 精品在线网站观看| 亚洲图片小说在线| 婷婷成人激情在线网| 欧美黄页在线免费观看| 国产精品永久入口久久久| 久久精品一区八戒影视| 在线播放麻豆| 欧美高清videos高潮hd| 噜噜噜91成人网| 另类av导航| 欧美成人在线影院| 久久精品国产免费| 国产乱视频在线观看| 国模视频一区二区三区| 国产精品自拍在线| 老司机av在线免费看| 国产91在线高潮白浆在线观看| 国产专区综合网| 日本在线观看免费| 国产成人av在线播放| www.欧美日韩| 超碰最新在线| 高清视频在线观看一区| 一区二区三区欧美激情| 宅男噜噜噜66国产精品免费| 久久久福利视频| 欧美性xxxxx极品娇小| 伦理一区二区三区| 日韩欧美不卡在线| 亚洲精品一区中文字幕乱码| 日日摸夜夜添夜夜添精品视频 | 精品一区久久| 亚洲电影中文字幕在线观看| 日韩最新av| 精品人妻少妇一区二区| 亚洲精品电影在线观看| 媚黑女一区二区| 第一页在线观看| 国产精品久久久久久婷婷天堂| 成人短视频下载| 精品3atv在线视频| 国产麻豆电影在线观看| 亚洲黄色有码视频| 久久精品国产77777蜜臀| 亚洲h片在线看| 久久精品一二三区| 欧美性受xxxx黑人xyx| 亚洲国产老妈| 日韩三级电影网| 99久久无色码| 欧美日本一区二区三区四区 | 99精彩视频| 色乱码一区二区三区88| 欧美99在线视频观看| 国产中文字幕在线| 国产精品久久波多野结衣| 欧美中文字幕一二三区视频| 日韩午夜高潮| 国语对白在线刺激| 妞干网视频在线观看| 久久艳片www.17c.com| 亚洲国产经典视频| 成人激情免费视频| 成人精品福利| 一区二区三区我不卡| 在线激情影院一区| 国产精品电影一区二区三区| 精品国产91久久久久久浪潮蜜月| 欧美孕妇孕交xxⅹ孕妇交| 久久66热这里只有精品| 亚洲嫩模很污视频| 国产精品美女一区二区三区| 色婷婷色综合| 国产精品久久久久久福利| 日本男女交配视频| 欧美激情综合亚洲一二区| 亚洲色图视频网站| 欧美婷婷在线| 涩涩av在线| 欧美亚洲日本在线观看| 国产成人综合av| 欧美精品久久天天躁| 国产精品一二三在| 台湾色综合娱乐中文网| 成人性生交大片免费看午夜| 麻豆视频传媒入口| 日本精品久久久久久久| 3d成人动漫网站| 国产精品亚洲一区二区三区在线| 欧美xxxx在线| 成人欧美在线| 亚洲老女人av| 精品久久久久久一区| 中文字幕自拍vr一区二区三区| 日韩理论片在线| 国产精品av久久久久久麻豆网| 五月天av在线| 黄色一级片视频| 欧洲精品久久| 欧美激情一区二区久久久| 亚洲成人自拍偷拍| 国产毛片精品视频| 欧美韩日一区| 成人免费视频观看| 狠狠狠综合7777久夜色撩人| 欧美国产日韩激情| 亚洲在线一区二区| 日韩小视频在线| 欧美视频一区二区在线观看| 99精品黄色片免费大全| 欧美区一区二| 日本一区精品视频| av在线free| 男人在线视频资源| 欧美另类videosbestsex日本| 国产精品96久久久久久| 日韩精品在线私人| 尤物av一区二区|