欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Bun入門學(xué)習(xí)教程吊打Node或Deno的現(xiàn)代JS運(yùn)行時(shí)

 更新時(shí)間:2022年07月19日 09:13:04   作者:易師傅  
這篇文章主要為大家介紹了一款吊打Node或Deno的現(xiàn)代JS運(yùn)行時(shí),Bun入門學(xué)習(xí)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

可能有同學(xué)(wo)內(nèi)心暗想:不是吧!阿sir,vue3、vite、前端工程化、前端可視化、前端框架已經(jīng)把自己折磨的夠嗆了,怎么現(xiàn)在又來了個(gè) Bun;

真是楚漢爭(zhēng)霸之路尚未結(jié)束,三足鼎立之勢(shì)怎能來臨!

話雖如此,但是身為一名合(mo)格(yu)的前端 er,只能邊含淚邊訴苦了;

順便說說 Bun 最近有多火:短短幾天 star 數(shù)量就從 2k 漲到了現(xiàn)在(2022-07-14)的 24.7k;

長話短說,下面開始我們直接帶走他 ~

什么是 Bun

Bun (讀音類似于[b?n],包子的意思) 是一個(gè)像 Node 或 Deno 這樣的現(xiàn)代 JavaScript 運(yùn)行時(shí);

通俗一點(diǎn)講就是你可以在 Bun 上運(yùn)行 JavaScript 代碼,你是不是在想這不是跟 Node 和 Deno 一樣的嗎,這也能火?

別急嘛,咱們往后看;

all-in-one

官方還稱其為: all-in-one JavaScript runtime;

所謂 all in one,是因?yàn)?Bun 和傳統(tǒng)的 Node.js 這種傳統(tǒng)的 javaScript 運(yùn)行時(shí) 不同; Bun 提供了 打包、轉(zhuǎn)譯、安裝和運(yùn)行 JavaScript & TypeScript 項(xiàng)目的功能,內(nèi)置原生打包器 (native bundler)、轉(zhuǎn)譯器、task runner、npm 客戶端,以及數(shù)百個(gè) Node.js API 和 Web API,包括約 90% 的 Node-API 函數(shù)(本機(jī)模塊)、fs、path、Buffer 等。

這就意味著你可以實(shí)現(xiàn)在 Bun 上運(yùn)行的大部分 Node API 和 Web API, 還可以在不需要使用 Webpack、Rollup、esbuild、babel 等工具的前提下直接運(yùn)行 TypeScript 、JSX 了;

乍一看,是不是瞬間檔次高了許多?

但是這樣還不足以讓你在同事、面試官的跟前吹 ?? ??

各位看官,您繼續(xù)往下看…

為什么用 Bun

性能測(cè)試結(jié)果

服務(wù)器端渲染 React:每秒的 HTTP 請(qǐng)求數(shù)

加載一個(gè)大型數(shù)據(jù)表:每秒平均查詢次數(shù)

FFI:每秒操作數(shù)

根據(jù)上面 服務(wù)器端渲染、加載大型數(shù)據(jù)表、FFI 三個(gè)方面來對(duì)比,可見 Bun 可以說在性能方面是吊打 Node.js 和 Deno;

為什么快

  • 引擎差異

不同于 Node.js 和 Deno,Bun 并沒有基于 V8 引擎,而是使用了 JavaScriptCore 引擎,它的執(zhí)行速度往往要比 V8 等更傳統(tǒng)引擎要快。

  • 語言差異

Bun.js使用的是新興的系統(tǒng)編程語言 ZIG 編寫的,主要通過手動(dòng)內(nèi)存管理對(duì)內(nèi)存進(jìn)行更細(xì)粒度的控制、無隱藏的控制流來提升程序的性能;

  • 從零開始

在上兩點(diǎn)的前提下,Bun.js 的大部分內(nèi)容都是完全從零開始編寫的,包括 JSX/TypeScript 轉(zhuǎn)譯器、npm 客戶端、打包器、SQLite 客戶端、HTTP 客戶端、WebSocket 客戶端等等。

注意:Zig 是一門系統(tǒng)級(jí)編程語言,專為穩(wěn)定性、可維護(hù)性和性能而設(shè)計(jì),是追求替代 C 語言在系統(tǒng)編程上的最佳地位。

內(nèi)置兼容性

Web API 支持:對(duì) fetch、WebSocket、 ReadableStream 等 API 都提供了內(nèi)置支持;

Node.js模塊:Bun 實(shí)現(xiàn)了 Node.js 的模塊解析算法,,以便我們可以在 Bun 中使用 npm 包,同時(shí)支持 ESM 和 CommonJS,但 Bun 內(nèi)部使用 ESM;

  • Bun.js 實(shí)現(xiàn)了大部分 Node-API (N-API),大部分 Node.js 原生模塊及全局變量(比如Buffer 和 process)都可以正常工作;
  • 自動(dòng)加載環(huán)境變量 .env 文件,不需要再 require("dotenv").load();
  • 附帶一個(gè)內(nèi)置的快速 SQLite3 戶端 bun:sqlite;

內(nèi)置 JavaScript、TypeScript、JSX 等(見下表)各種轉(zhuǎn)譯器;

InputLoaderOutput
.jsJSX + JavaScript.js
.jsxJSX + JavaScript.js
.tsTypeScript + JavaScript.js
.tsxTypeScript + JSX + JavaScript.js
.mjsJavaScript.js
.cjsJavaScript.js
.mtsTypeScript.js
.ctsTypeScript.js
.tomlTOML.js
.cssCSS.css
.envEnvN/A
.*filestring

通過上述大家能發(fā)現(xiàn),Bun 的目標(biāo)是想在瀏覽器之外運(yùn)行 JavaScript,為我們的基礎(chǔ)架構(gòu)帶來性能和復(fù)雜性的增強(qiáng),并通過更好、更簡(jiǎn)單的工具提高開發(fā)人員的生產(chǎn)力。

快速上手

Mac/Linux 上安裝

安裝

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

新建 http.js

 export default {
   port: 3000,
   fetch(request) {
     return new Response('Welcome to Bun!');
   },
 };

運(yùn)行

 bun run http.js

瀏覽器中打開:http://localhost:3000 即可

注意:如果使用 Linux,強(qiáng)烈推薦內(nèi)核版本 5.6 或更高版本,但最低為 5.1.

windows上安裝

由于 Bun 對(duì) windows 用戶不太友好,安裝起來并不容易,如果您真的想在windows 上安裝,可以看看如何在windows 上安裝 Bun 這篇文章去進(jìn)行安裝;

Bun 的常見功能使用

1. 當(dāng)做包管理器使用

通過 package.json 安裝依賴

 bun install

新增或刪除 package.json 中的某個(gè)安裝包

 # 刪除
 bun remove react
 # 安裝
 bun add preact

根據(jù)測(cè)試,在 Linux 上 bun install 運(yùn)行安裝包速度往往比 npm install 運(yùn)行腳本快 20 - 100 倍。

2. 直接運(yùn)行scripts腳本

用 bun run 來代替 npm run

 # Instead of "npm run clean"
 bun run clean
 # This also works
 bun clean

運(yùn)行 package.json 中的腳本

  # package.json 
  {
    "name": "myapp",
    "scripts": {
      "clean": "rm -rf dist out node_modules"
    }
  }
  ?
  # 在終端中運(yùn)行以下命令
  bun run clean

根據(jù)測(cè)試,bun 運(yùn)行 package.json 腳本比 npm 運(yùn)行 package.json 腳本快 30 倍。

3. 快速創(chuàng)建 Next.js 項(xiàng)目

快速創(chuàng)建

 # 創(chuàng)建
 bun create next ./app
 # 運(yùn)行
 cd app
 bun dev # start dev server

關(guān)聯(lián)一個(gè)已經(jīng)存在的 Next.js 應(yīng)用

 bun add bun-framework-next
 echo "framework = 'next'" > bunfig.toml
 bun bun # bundle dependencies
 bun dev # start dev server

注意:Next.js 的需多功能都支持,但是也有小部分暫時(shí)不支持,所以生成環(huán)境使用需謹(jǐn)慎。

4. 快速創(chuàng)建 React 項(xiàng)目

快速創(chuàng)建

 bun create react ./app
 cd app
 bun dev # start dev server

關(guān)聯(lián)現(xiàn)有的React項(xiàng)目

 # To enable React Fast Refresh, ensure it is installed
 bun add -d react-refresh
 # Generate a bundle for your entry point(s)
 bun bun ./src/index.js # jsx, tsx, ts also work. can be multiple files
 # Start the dev server
 bun dev

5. 運(yùn)行 TypeScript

在 Bun 中,天然支持運(yùn)行運(yùn)行 TypeScript,無需配置,無需額外安裝;

如果你導(dǎo)入一個(gè).tsor.tsx文件,bun 會(huì)將它轉(zhuǎn)換成 JavaScript;bun 還編譯node_modules中的.ts或.tsx文件;這是由 bun 內(nèi)置了 TypeScript 轉(zhuǎn)譯器,且速度很快。

如果你想在全局使用對(duì)應(yīng)的 API,安裝 bun-typs 到你的項(xiàng)目即可

 # 安裝
 bun add -d bun-types
 # 在tsconfig.json中使用
 {
   "compilerOptions": {
     "types": ["bun-types"]
   }
 }

6. 常用命令

  • bun add:等同于 yarn add 或 npm install
  • bun install:等同于 yarn install 或 npm install
  • bun run:類似于 npm run
  • bun create:通過該命令,可快速創(chuàng)建一個(gè)模板項(xiàng)目
  • bun bun:該命令會(huì)遞歸收集指定文件的導(dǎo)入依賴,然后生成包含這些信息的 node_modules.bun 文件
  • bun upgrade:要升級(jí) bun,請(qǐng)運(yùn)行bun upgrade

7. 配置文件 bunfig.toml

bunfig.toml 是 bun 的配置文件。

它允許您在 bunfig.toml 加載配置,而不是每次都將參數(shù)傳遞給命令行。在解析命令行參數(shù)之前加載配置文件,這意味著命令行參數(shù)可以覆蓋這個(gè)配置。

下面是一個(gè)配置例子:

# Set a default framework to use
# By default, bun will look for an npm package like `bun-framework-${framework}`, followed by `${framework}`
framework = "next"
logLevel = "debug"
# publicDir = "public"
# external = ["jquery"]
[macros]
# Remap any import like this:
#     import {graphql} from 'react-relay';
# To:
#     import {graphql} from 'macro:bun-macro-relay';
react-relay = { "graphql" = "bun-macro-relay" }
[bundle]
saveTo = "node_modules.bun"
# Don't need this if `framework` is set, but showing it here as an example anyway
entryPoints = ["./app/index.ts"]
[bundle.packages]
# If you're bundling packages that do not actually live in a `node_modules` folder or do not have the full package name in the file path, you can pass this to bundle them anyway
"@bigapp/design-system" = true
[dev]
# Change the default port from 3000 to 5000
# Also inherited by Bun.serve
port = 5000
[define]
# Replace any usage of "process.env.bagel" with the string `lox`.
# The values are parsed as JSON, except single-quoted strings are supported and `'undefined'` becomes `undefined` in JS.
# This will probably change in a future release to be just regular TOML instead. It is a holdover from the CLI argument parsing.
"process.env.bagel" = "'lox'"
[loaders]
# When loading a .bagel file, run the JS parser
".bagel" = "js"
[debug]
# When navigating to a blob: or src: link, open the file in your editor
# If not, it tries $EDITOR or $VISUAL
# If that still fails, it will try Visual Studio Code, then Sublime Text, then a few others
# This is used by Bun.openInEditor()
editor = "code"
# List of editors:
# - "subl", "sublime"
# - "vscode", "code"
# - "textmate", "mate"
# - "idea"
# - "webstorm"
# - "nvim", "neovim"
# - "vim","vi"
# - "emacs"
# - "atom"
# If you pass it a file path, it will open with the file path instead
# It will recognize non-GUI editors, but I don't think it will work yet

相關(guān)屬性解釋:

  • framework :指定默認(rèn)使用的 framework 版本,

bun 將根據(jù) bun-framework-${framework} 格式找尋找 npm 包;

  • logLevel :指定 log 級(jí)別(可用值 error 、 warn 、 info 和 debug );
  • publicDir :指定 public 目錄;
  • external :指定外部擴(kuò)展,作用等同于 Webpack 的 externals;
  • macros :宏定義,用于替換 import 路徑,比如:

import { graphql } from 'react-relay'; 將被轉(zhuǎn)換為

import { graphql } from "macro:bun-macro-relay/bun-macro-relay.tsx";

  • dev.port :指定服務(wù)的監(jiān)聽端口(默認(rèn) 3000 );
  • define :作用等同于 Webpack 的 DefinePlugin;
  • loaders :指定各類文件的解析器;

當(dāng)然,上述只是舉例說明了一些在前端領(lǐng)域常見的一些情況,如果你還想了解更多的使用方法與案例,可查看:

查看官方例子

查看官方文檔

總結(jié)

  • 對(duì)于性能方面,值得一探究竟;
  • 版本較新,最新版本才 v0.1.4;
  • 但是能否真正的用于生產(chǎn),按照作者目前的原話是不建議的,因?yàn)橛捎趦?nèi)存泄露等問題,所以不建議在生產(chǎn)環(huán)境中使用,但是目前作者已經(jīng)在 996 的緊急修復(fù)相關(guān)問題了;

不過作為一門能吊打 Node 和 Deno 的工具,咱們還是有必要去了解作為茶余飯后吹牛的資本的;

以上就是吊打 Node 和 Deno 的 Bun入門學(xué)習(xí)教程的詳細(xì)內(nèi)容,更多關(guān)于Bun 入門學(xué)習(xí)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • nodejs入門教程一:概念與用法簡(jiǎn)介

    nodejs入門教程一:概念與用法簡(jiǎn)介

    這篇文章主要介紹了nodejs入門教程之概念與用法,結(jié)合實(shí)例形式分析了nodejs基本概念、功能、命令與相關(guān)使用技巧,需要的朋友可以參考下
    2017-04-04
  • Nodejs實(shí)現(xiàn)用戶注冊(cè)功能

    Nodejs實(shí)現(xiàn)用戶注冊(cè)功能

    本文通過實(shí)例代碼給大家介紹了Nodejs實(shí)現(xiàn)用戶注冊(cè)功能,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • node.js安裝超詳細(xì)步驟教程(推薦!)

    node.js安裝超詳細(xì)步驟教程(推薦!)

    其實(shí)Node.js就是運(yùn)行在服務(wù)端的JavaScript,Node.js是一個(gè)基于Chrome?JavaScript運(yùn)行時(shí)建立的一個(gè)平臺(tái),下面這篇文章主要給大家介紹了關(guān)于node.js安裝超詳細(xì)步驟教程的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • 基于nodejs的雪碧圖制作工具的示例代碼

    基于nodejs的雪碧圖制作工具的示例代碼

    雪碧圖就是把很多小圖標(biāo)合并為一張圖片,這篇文章主要介紹了基于nodejs的雪碧圖制作工具的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 關(guān)于Sequelize連接查詢時(shí)inlude中model和association的區(qū)別詳解

    關(guān)于Sequelize連接查詢時(shí)inlude中model和association的區(qū)別詳解

    這篇文章主要介紹了關(guān)于Sequelize連接查詢時(shí)inlude中model與association的區(qū)別,文中介紹的很詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • node.js調(diào)用C++函數(shù)的方法示例

    node.js調(diào)用C++函數(shù)的方法示例

    這篇文章主要介紹了node.js調(diào)用C++函數(shù)的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • nodejs實(shí)現(xiàn)jwt的示例代碼

    nodejs實(shí)現(xiàn)jwt的示例代碼

    本文主要介紹了nodejs實(shí)現(xiàn)jwt的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Nodejs中fs文件系統(tǒng)模塊的路徑動(dòng)態(tài)拼接的問題和解決方案

    Nodejs中fs文件系統(tǒng)模塊的路徑動(dòng)態(tài)拼接的問題和解決方案

    在使用fs模塊操作文件時(shí),如果提供的操作路徑是以./或../開頭的相對(duì)路徑時(shí),很容易出現(xiàn)路徑動(dòng)態(tài)拼接錯(cuò)誤的問題,所以本文給大家介紹了Nodejs中fs文件系統(tǒng)模塊的路徑動(dòng)態(tài)拼接的問題和解決方案,需要的朋友可以參考下
    2024-03-03
  • Node.js實(shí)現(xiàn)Excel轉(zhuǎn)JSON

    Node.js實(shí)現(xiàn)Excel轉(zhuǎn)JSON

    本文給大家記錄的是個(gè)人項(xiàng)目中遇到的,使用node.js實(shí)現(xiàn)Excel轉(zhuǎn)換成Json的方法和過程,十分的簡(jiǎn)單實(shí)用,也很詳細(xì),這里推薦給有需要的小伙伴參考下。
    2015-04-04
  • Lua表達(dá)式和控制結(jié)構(gòu)學(xué)習(xí)筆記

    Lua表達(dá)式和控制結(jié)構(gòu)學(xué)習(xí)筆記

    這篇文章主要介紹了Lua表達(dá)式和控制結(jié)構(gòu)學(xué)習(xí)筆記,本文講解了算術(shù)操作符、關(guān)系操作符、邏輯操作符、局部變量與作用域、控制結(jié)構(gòu)等內(nèi)容,需要的朋友可以參考下
    2014-12-12

最新評(píng)論