bun.js 简单使用指南

14 min read

仓库地址

https://github.com/Jarred-Sumner/bun#Reference

作为包管理 下包快

在Linux上,bun install的安装速度往往比npm install快20倍-100倍。在macOS上,它更像是4倍-80倍。

bun install  // 拉包
bun remove react  // 删包
bun add preact   // 下包
bun run clean // 清理现场 6ms 就行了

为什么bun.js 这么快

它对所有数据使用线性数组。包是通过自动递增的整数ID或包名的哈希值来引用的。长于8个字符的字符串被去掉。在保存在磁盘上之前,锁文件被收集了垃圾,并通过行走包树和按依赖顺序克隆包而变得确定。

作为项目管理 ,秒起一个 next.js

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

// 已有项目这么干
bun add bun-framework-next
echo "framework = 'next'" > bunfig.toml
bun bun # bundle dependencies
bun dev # start dev server

作为项目管理 ,秒起一个 react.js

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

// 已有项目这么干
# To enable React Fast Refresh, ensure "react-refresh" is installed
npm install -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

TS支持

bun add -d bun-types

//tsconfig.json
{
  "compilerOptions": {
    "types": ["bun-types"]
  }
}

命令行参数

--npm 使用npm进行任务和安装
--yarn 使用yarn进行任务和安装
--pnpm 使用pnpm进行任务和安装
--force 覆盖现有文件
--no-install 跳过安装node_modules和任务
--no-git 不初始化git仓库
--open 启动并在完成后在浏览器中打开

玩一下sqlite

import { Database } from "bun:sqlite";

const db = new Database("mydb.sqlite");
db.run(
  "CREATE TABLE IF NOT EXISTS foo (id INTEGER PRIMARY KEY AUTOINCREMENT, greeting TEXT)"
);
db.run("INSERT INTO foo (greeting) VALUES (?)", "Welcome to bun!");
db.run("INSERT INTO foo (greeting) VALUES (?)", "Hello World!");

// get the first row
db.query("SELECT * FROM foo").get();
// { id: 1, greeting: "Welcome to bun!" }

// get all rows
db.query("SELECT * FROM foo").all();
// [
//   { id: 1, greeting: "Welcome to bun!" },
//   { id: 2, greeting: "Hello World!" },
// ]

// get all rows matching a condition
db.query("SELECT * FROM foo WHERE greeting = ?").all("Welcome to bun!");
// [
//   { id: 1, greeting: "Welcome to bun!" },
// ]

// get first row matching a named condition
db.query("SELECT * FROM foo WHERE greeting = $greeting").get({
  $greeting: "Welcome to bun!",
});
// [
//   { id: 1, greeting: "Welcome to bun!" },
// ]