[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fbooklet\u002Fend\u002Fbun\u002Fbase":3,"knowledge-related-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fbun\u002Fbase":790,"knowledge-series-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fbun\u002Fbase":812},{"source":4,"connector":5,"page":6},"sqlite","better-sqlite3",{"path":7,"title":8,"description":9,"category":10,"tags":11,"date":13,"pinned":14,"draft":14,"body":15,"seo":786,"stem":787,"id":788,"extension":789},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fbun\u002Fbase","Bun 基础与核心命令","Bun 是用 Zig 编写的 JavaScript 运行时，内置包管理（bun install）、打包（bun build）、测试（bun test）等，并持续兼容 Node.js API。本文介绍核心特点、安装方式，以及日常最常用的命令与包管理功能。见 运行时对比。","技能小册",[12],"bun","2026-07-23",false,{"type":16,"value":17,"toc":777},"minimark",[18,22,60,65,148,152,193,201,207,211,317,332,339,343,533,537,540,671,674,678,720,723,726,773],[19,20,8],"h1",{"id":21},"bun-基础与核心命令",[23,24,25,32,33,37,38,42,43,46,47,50,51,54,55,59],"p",{},[26,27,31],"a",{"href":28,"rel":29},"https:\u002F\u002Fbun.sh\u002F",[30],"nofollow","Bun"," 是用 ",[34,35,36],"strong",{},"Zig"," 编写的 JavaScript 运行时，内置包管理（",[39,40,41],"code",{},"bun install","）、打包（",[39,44,45],{},"bun build","）、测试（",[39,48,49],{},"bun test","）等，并持续兼容 ",[34,52,53],{},"Node.js API","。见 ",[26,56,58],{"href":57},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fbun-deno-node","运行时对比","。",[61,62,64],"h2",{"id":63},"一核心特点","一、核心特点",[66,67,68,81],"table",{},[69,70,71],"thead",{},[72,73,74,78],"tr",{},[75,76,77],"th",{},"特性",[75,79,80],{},"说明",[82,83,84,93,101,126,138],"tbody",{},[72,85,86,90],{},[87,88,89],"td",{},"一体化工具链",[87,91,92],{},"运行时 + 安装 + 构建 + 测试",[72,94,95,98],{},[87,96,97],{},"JavaScriptCore",[87,99,100],{},"使用 WebKit 的 JS 引擎（非 V8）",[72,102,103,106],{},[87,104,105],{},"Node 兼容",[87,107,108,109,112,113,112,116,119,120,125],{},"常用 ",[39,110,111],{},"fs","、",[39,114,115],{},"http",[39,117,118],{},"buffer"," 等 API；具体以",[26,121,124],{"href":122,"rel":123},"https:\u002F\u002Fbun.sh\u002Fdocs\u002Fruntime\u002Fnodejs-apis",[30],"官方兼容表","为准",[72,127,128,131],{},[87,129,130],{},"TypeScript",[87,132,133,134,137],{},"可直接运行 ",[39,135,136],{},".ts"," 文件",[72,139,140,145],{},[87,141,142],{},[39,143,144],{},"Bun.serve",[87,146,147],{},"内置 HTTP 服务端 API",[61,149,151],{"id":150},"二安装","二、安装",[153,154,159],"pre",{"className":155,"code":156,"language":157,"meta":158,"style":158},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","curl -fsSL https:\u002F\u002Fbun.sh\u002Finstall | bash\nbun --version\n","bash","",[39,160,161,185],{"__ignoreMap":158},[162,163,166,170,174,178,182],"span",{"class":164,"line":165},"line",1,[162,167,169],{"class":168},"sbgvK","curl",[162,171,173],{"class":172},"stzsN"," -fsSL",[162,175,177],{"class":176},"s_sjI"," https:\u002F\u002Fbun.sh\u002Finstall",[162,179,181],{"class":180},"smGrS"," |",[162,183,184],{"class":168}," bash\n",[162,186,188,190],{"class":164,"line":187},2,[162,189,12],{"class":168},[162,191,192],{"class":172}," --version\n",[23,194,195,196,59],{},"其他安装方式见 ",[26,197,200],{"href":198,"rel":199},"https:\u002F\u002Fbun.sh\u002Fdocs\u002Finstallation",[30],"Bun 安装文档",[23,202,203,204,59],{},"升级：",[39,205,206],{},"bun upgrade",[61,208,210],{"id":209},"三最小-http-示例","三、最小 HTTP 示例",[153,212,216],{"className":213,"code":214,"language":215,"meta":158,"style":158},"language-typescript shiki shiki-themes material-theme-lighter github-light github-dark","Bun.serve({\n  port: 3000,\n  fetch(req) {\n    return new Response(\"Hello Bun!\");\n  },\n});\n","typescript",[39,217,218,237,253,272,301,307],{"__ignoreMap":158},[162,219,220,223,227,231,234],{"class":164,"line":165},[162,221,31],{"class":222},"su5hD",[162,224,226],{"class":225},"sP7_E",".",[162,228,230],{"class":229},"sGLFI","serve",[162,232,233],{"class":222},"(",[162,235,236],{"class":225},"{\n",[162,238,239,243,246,250],{"class":164,"line":187},[162,240,242],{"class":241},"skxfh","  port",[162,244,245],{"class":225},":",[162,247,249],{"class":248},"srdBf"," 3000",[162,251,252],{"class":225},",\n",[162,254,256,260,262,266,269],{"class":164,"line":255},3,[162,257,259],{"class":258},"sVXei","  fetch",[162,261,233],{"class":225},[162,263,265],{"class":264},"s99_P","req",[162,267,268],{"class":225},")",[162,270,271],{"class":225}," {\n",[162,273,275,279,282,285,287,291,294,296,298],{"class":164,"line":274},4,[162,276,278],{"class":277},"sVHd0","    return",[162,280,281],{"class":180}," new",[162,283,284],{"class":229}," Response",[162,286,233],{"class":241},[162,288,290],{"class":289},"sjJ54","\"",[162,292,293],{"class":176},"Hello Bun!",[162,295,290],{"class":289},[162,297,268],{"class":241},[162,299,300],{"class":225},";\n",[162,302,304],{"class":164,"line":303},5,[162,305,306],{"class":225},"  },\n",[162,308,310,313,315],{"class":164,"line":309},6,[162,311,312],{"class":225},"}",[162,314,268],{"class":222},[162,316,300],{"class":225},[153,318,320],{"className":155,"code":319,"language":157,"meta":158,"style":158},"bun run server.ts\n",[39,321,322],{"__ignoreMap":158},[162,323,324,326,329],{"class":164,"line":165},[162,325,12],{"class":168},[162,327,328],{"class":176}," run",[162,330,331],{"class":176}," server.ts\n",[23,333,334,335,59],{},"更完整的 HTTP 服务器写法（路由、Cookie、HTML 热重载等）见 ",[26,336,338],{"href":337},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fbun\u002Fhttp","HTTP 服务器",[61,340,342],{"id":341},"四核心命令速查表","四、核心命令速查表",[66,344,345,358],{},[69,346,347],{},[72,348,349,352,355],{},[75,350,351],{},"命令",[75,353,354],{},"用途说明",[75,356,357],{},"示例",[82,359,360,381,407,425,443,463,478,493,506,520],{},[72,361,362,367,377],{},[87,363,364],{},[39,365,366],{},"bun init",[87,368,369,370,373,374],{},"在当前目录初始化一个新的 Bun 项目，生成 ",[39,371,372],{},"package.json"," 和 ",[39,375,376],{},"tsconfig.json",[87,378,379],{},[39,380,366],{},[72,382,383,388,402],{},[87,384,385],{},[39,386,387],{},"bun run \u003Cfile>",[87,389,390,391,394,395,397,398,401],{},"运行一个 JavaScript\u002FTypeScript 文件。",[39,392,393],{},"bun run dev"," 会运行 ",[39,396,372],{}," 中的 ",[39,399,400],{},"dev"," 脚本",[87,403,404],{},[39,405,406],{},"bun run index.ts",[72,408,409,414,420],{},[87,410,411],{},[39,412,413],{},"bun add \u003Cpkg>",[87,415,416,417],{},"安装一个 npm 包并将其添加到 ",[39,418,419],{},"dependencies",[87,421,422],{},[39,423,424],{},"bun add express",[72,426,427,432,438],{},[87,428,429],{},[39,430,431],{},"bun add -d \u003Cpkg>",[87,433,434,435],{},"安装一个开发依赖包并添加到 ",[39,436,437],{},"devDependencies",[87,439,440],{},[39,441,442],{},"bun add -d @types\u002Fnode",[72,444,445,449,459],{},[87,446,447],{},[39,448,41],{},[87,450,451,452,454,455,458],{},"根据 ",[39,453,372],{}," 安装所有依赖，并生成锁文件（Bun 1.2+ 默认 ",[39,456,457],{},"bun.lock","）",[87,460,461],{},[39,462,41],{},[72,464,465,470,473],{},[87,466,467],{},[39,468,469],{},"bun remove \u003Cpkg>",[87,471,472],{},"移除一个依赖包",[87,474,475],{},[39,476,477],{},"bun remove express",[72,479,480,485,488],{},[87,481,482],{},[39,483,484],{},"bunx \u003Ccommand>",[87,486,487],{},"临时下载并执行一个 npm 包的命令，用完即删，避免全局污染",[87,489,490],{},[39,491,492],{},"bunx eslint --fix",[72,494,495,499,502],{},[87,496,497],{},[39,498,49],{},[87,500,501],{},"运行项目中的测试文件",[87,503,504],{},[39,505,49],{},[72,507,508,512,515],{},[87,509,510],{},[39,511,45],{},[87,513,514],{},"为浏览器或生产环境打包项目",[87,516,517],{},[39,518,519],{},"bun build .\u002Findex.tsx --outdir .\u002Fbuild",[72,521,522,526,529],{},[87,523,524],{},[39,525,206],{},[87,527,528],{},"升级 Bun 本身到最新版本",[87,530,531],{},[39,532,206],{},[61,534,536],{"id":535},"五包管理功能","五、包管理功能",[23,538,539],{},"Bun 的包管理器不仅是速度的代名词，还提供了许多实用的功能。",[541,542,543,557,586,639],"ul",{},[544,545,546,549,550,552,553,373,555,59],"li",{},[34,547,548],{},"初始化项目","：",[39,551,366],{}," 会快速创建一个带有 TypeScript 配置的现代项目骨架，自动生成 ",[39,554,372],{},[39,556,376],{},[544,558,559,549,562,564,565,570,571,574,575,577,578,581,582,585],{},[34,560,561],{},"安装依赖",[39,563,41],{}," 会创建锁文件，确保依赖版本在团队和 CI 中保持一致。",[34,566,567,568],{},"Bun 1.2 起默认生成文本格式的 ",[39,569,457],{},"（JSONC，可直接查看 diff），此前版本默认是二进制的 ",[39,572,573],{},"bun.lockb","；已有 ",[39,576,573],{}," 的旧项目可通过 ",[39,579,580],{},"bun install --save-text-lockfile --frozen-lockfile --lockfile-only"," 迁移到新格式。安装速度显著快于 ",[39,583,584],{},"npm install","，具体倍数以官方 benchmark 的场景与版本为准。",[544,587,588,549,591,594,595,600,601],{},[34,589,590],{},"查看工具",[39,592,593],{},"bun pm"," 命令组提供多种包管理工具（完整列表见 ",[26,596,599],{"href":597,"rel":598},"https:\u002F\u002Fbun.com\u002Fdocs\u002Fpm\u002Fcli\u002Fpm",[30],"官方 bun pm 文档","）：\n",[541,602,603,609,619,633],{},[544,604,605,608],{},[39,606,607],{},"bun pm bin","：查看本地或全局可执行文件路径。",[544,610,611,614,615,618],{},[39,612,613],{},"bun pm ls","：列出已安装依赖及其解析版本（可用 ",[39,616,617],{},"--all"," 展开传递依赖）。",[544,620,621,624,625,628,629,632],{},[39,622,623],{},"bun why \u003Cpkg>","：说明某个包为何被安装（依赖链；亦可见文档中的 ",[39,626,627],{},"bun pm why"," 别名，以当前 CLI ",[39,630,631],{},"--help"," 为准）。",[544,634,635,638],{},[39,636,637],{},"bun pm migrate","：从其它包管理器锁文件迁移（见下条）。",[544,640,641,644,645,648,649,648,652,655,656,658,659,661,662,664,665,667,668,59],{},[34,642,643],{},"迁移项目","：已有 ",[39,646,647],{},"package-lock.json"," \u002F ",[39,650,651],{},"yarn.lock",[39,653,654],{},"pnpm-lock.yaml"," 时，可执行 ",[39,657,637],{},"（或直接 ",[39,660,41],{},"）生成 Bun 锁文件（当前默认为文本格式 ",[39,663,457],{},"）；原锁文件会保留，确认无误后再自行删除。若已存在 ",[39,666,457],{}," 需覆盖，可加 ",[39,669,670],{},"--force",[23,672,673],{},"Bun 的包管理器是所有命令中最亮眼的部分之一，极大提升了依赖安装和管理的效率。",[61,675,677],{"id":676},"六使用注意","六、使用注意",[541,679,680,687,694,706],{},[544,681,682,683,686],{},"迁移 Node 项目前：在目标 ",[34,684,685],{},"Bun 版本"," 下跑通测试与关键依赖（尤其原生 addon）。",[544,688,689,690,693],{},"性能数据以官方 benchmark 的",[34,691,692],{},"场景与版本","为准，不宜外推为所有 workload。",[544,695,696,697,699,700,702,703,705],{},"新项目默认使用文本锁文件 ",[39,698,457],{},"（Bun 1.2+），可直接在 PR 中查看 diff；仍在使用旧的二进制 ",[39,701,573],{}," 的项目无法直接查看差异，若需查看依赖树可用 ",[39,704,613],{},"。两种格式均需提交到 Git 以保证团队与 CI 依赖版本一致。",[544,707,708,709,712,713,715,716,59],{},"CI 中建议使用 ",[39,710,711],{},"bun install --frozen-lockfile","，避免锁文件与 ",[39,714,372],{}," 不一致时静默升级依赖。生产部署与容器化方案见 ",[26,717,719],{"href":718},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fbun\u002Fdeploy","生产环境与部署指南",[61,721,722],{"id":722},"参考文献",[23,724,725],{},"以下链接在编写时均可正常访问：",[66,727,728,737],{},[69,729,730],{},[72,731,732,735],{},[75,733,734],{},"资料",[75,736,80],{},[82,738,739,751,762],{},[72,740,741,748],{},[87,742,743],{},[26,744,747],{"href":745,"rel":746},"https:\u002F\u002Fbun.sh\u002Fdocs",[30],"Bun 文档",[87,749,750],{},"官方",[72,752,753,759],{},[87,754,755],{},[26,756,144],{"href":757,"rel":758},"https:\u002F\u002Fbun.sh\u002Fdocs\u002Fapi\u002Fhttp",[30],[87,760,761],{},"HTTP API",[72,763,764,770],{},[87,765,766],{},[26,767,769],{"href":122,"rel":768},[30],"Node.js 兼容",[87,771,772],{},"API 列表",[774,775,776],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVXei, html code.shiki .sVXei{--shiki-light:#E53935;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":158,"searchDepth":187,"depth":187,"links":778},[779,780,781,782,783,784,785],{"id":63,"depth":187,"text":64},{"id":150,"depth":187,"text":151},{"id":209,"depth":187,"text":210},{"id":341,"depth":187,"text":342},{"id":535,"depth":187,"text":536},{"id":676,"depth":187,"text":677},{"id":722,"depth":187,"text":722},{"title":8,"description":9},"knowledge\u002Fbooklet\u002Fend\u002FBun\u002Fbase","knowledge\u002Fknowledge\u002Fbooklet\u002Fend\u002FBun\u002Fbase.md","md",{"items":791},[792,794,796,800,804,808],{"path":337,"title":338,"description":793,"category":10,"score":309},"Bun 内置了高性能的 HTTP 服务器，通过 Bun.serve 可以轻松启动服务。从 Bun v1.2.3 开始，推荐使用 routes 对象来定义路由，更加直观和灵活。",{"path":718,"title":719,"description":795,"category":10,"score":309},"Bun 内置了高性能的打包器（bundler），可以对前端或全栈应用进行生产优化。",{"path":797,"title":798,"description":799,"category":10,"score":274},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fbasics","后端入门概览","本目录覆盖 JavaScript\u002FTypeScript 服务端运行时与框架、数据存储，以及 Rust 系统编程入门，提供从零到部署的完整学习路径。前置建议：JavaScript 基础、工程化 · 环境变量。",{"path":801,"title":802,"description":803,"category":10,"score":165},"\u002Fknowledge\u002Fbooklet\u002Fsql","数据存储导读","本目录覆盖关系型数据库 MySQL 与内存数据库 Redis，从概念、安装到数据操作、性能优化、备份与缓存实践，面向后端开发与运维入门。与 NestJS 数据库、后端入门 等应用层文档配合阅读。",{"path":805,"title":806,"description":807,"category":10,"score":165},"\u002Fknowledge\u002Fbooklet\u002Fsql\u002Fredis\u002Fredis","Redis 入门：概念、安装与数据类型","从「是什么\u002F为什么用」到 Docker\u002F本机安装、基本 CLI，再到五大基础类型命令、持久化与过期键机制、与 MySQL 的选型对比，以及常见踩坑，全面梳理 Redis 入门知识。",{"path":809,"title":810,"description":811,"category":10,"score":165},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fdocker\u002Fdocker-compose","Docker Compose 编排","Docker Compose 是定义和运行多容器 Docker 应用的工具，通过一个 compose.yml 文件即可管理 Web、数据库、缓存等多个服务。本文覆盖安装、完整字段说明、多服务示例、常用指令与常见排错。",{"series":813,"title":12,"items":814,"index":820,"prev":821,"next":822},"booklet\u002Fend\u002Fbun",[815,816,818],{"path":7,"title":8,"date":13,"pinned":14},{"path":718,"title":719,"date":817,"pinned":14},"2024-08-31",{"path":337,"title":338,"date":819,"pinned":14},"2026-07-12",0,null,{"path":718,"title":719,"date":817,"pinned":14}]