[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Ftools":3,"knowledge-related-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Ftools":1119,"knowledge-series-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Ftools":1145},{"source":4,"connector":5,"page":6},"sqlite","better-sqlite3",{"path":7,"title":8,"description":9,"category":10,"tags":11,"date":14,"pinned":15,"draft":15,"body":16,"seo":1115,"stem":1116,"id":1117,"extension":1118},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Ftools","内置工具链","Deno 提供了开箱即用的工具链，无需安装任何第三方依赖即可完成代码格式化、检查、测试、覆盖率、文档生成和基准测试等任务。","技能小册",[12,13],"deno","tools","2026-01-24",false,{"type":17,"value":18,"toc":1107},"minimark",[19,22,27,30,35,137,140,144,152,159,211,238,259,266,269,308,313,374,381,397,407,518,523,573,580,587,637,644,647,698,703,801,808,814,908,932,935,943,947,1036,1043,1046,1103],[20,21,8],"h1",{"id":8},[23,24,26],"h2",{"id":25},"deno-内置工具链","Deno 内置工具链",[28,29,9],"p",{},[31,32,34],"h3",{"id":33},"一命令总览","一、命令总览",[36,37,38,54],"table",{},[39,40,41],"thead",{},[42,43,44,48,51],"tr",{},[45,46,47],"th",{},"命令",[45,49,50],{},"说明",[45,52,53],{},"对应 Node.js 生态工具",[55,56,57,72,85,98,111,124],"tbody",{},[42,58,59,66,69],{},[60,61,62],"td",{},[63,64,65],"code",{},"deno fmt",[60,67,68],{},"自动格式化代码（支持 TypeScript、JavaScript、JSON、Markdown）",[60,70,71],{},"Prettier",[42,73,74,79,82],{},[60,75,76],{},[63,77,78],{},"deno lint",[60,80,81],{},"检查代码潜在问题，包含超过 100 条规则",[60,83,84],{},"ESLint",[42,86,87,92,95],{},[60,88,89],{},[63,90,91],{},"deno test",[60,93,94],{},"运行测试（支持断言库、快照等）",[60,96,97],{},"Jest \u002F Mocha",[42,99,100,105,108],{},[60,101,102],{},[63,103,104],{},"deno coverage",[60,106,107],{},"生成测试覆盖率报告",[60,109,110],{},"c8 \u002F nyc",[42,112,113,118,121],{},[60,114,115],{},[63,116,117],{},"deno doc",[60,119,120],{},"从源代码注释生成 API 文档",[60,122,123],{},"TypeDoc \u002F JSDoc",[42,125,126,131,134],{},[60,127,128],{},[63,129,130],{},"deno bench",[60,132,133],{},"运行基准测试（性能测试）",[60,135,136],{},"benchmark.js",[28,138,139],{},"这些工具共享 Deno 的权限模型（默认无权限，需显式授予），并且风格统一，无需配置文件即可工作。",[31,141,143],{"id":142},"二各实用功能介绍","二、各实用功能介绍",[145,146,148,149,151],"h4",{"id":147},"_1-deno-fmt-代码格式化","1. ",[63,150,65],{}," – 代码格式化",[28,153,154,155,158],{},"自动将代码格式化为符合 Deno 规范的样式（类似 Go 的 ",[63,156,157],{},"gofmt","），默认缩进为 2 个空格，行尾分号会被自动移除。",[160,161,166],"pre",{"className":162,"code":163,"language":164,"meta":165,"style":165},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","deno fmt                     # 格式化当前目录下所有受支持文件\ndeno fmt --check             # 只检查是否已格式化，不写文件（用于 CI）\ndeno fmt --watch             # 监听文件变化并自动格式化\n","bash","",[63,167,168,184,198],{"__ignoreMap":165},[169,170,173,176,180],"span",{"class":171,"line":172},"line",1,[169,174,12],{"class":175},"sbgvK",[169,177,179],{"class":178},"s_sjI"," fmt",[169,181,183],{"class":182},"sutJx","                     # 格式化当前目录下所有受支持文件\n",[169,185,187,189,191,195],{"class":171,"line":186},2,[169,188,12],{"class":175},[169,190,179],{"class":178},[169,192,194],{"class":193},"stzsN"," --check",[169,196,197],{"class":182},"             # 只检查是否已格式化，不写文件（用于 CI）\n",[169,199,201,203,205,208],{"class":171,"line":200},3,[169,202,12],{"class":175},[169,204,179],{"class":178},[169,206,207],{"class":193}," --watch",[169,209,210],{"class":182},"             # 监听文件变化并自动格式化\n",[28,212,213,217,218,221,222,221,225,221,228,221,231,221,234,237],{},[214,215,216],"strong",{},"支持的文件类型","：",[63,219,220],{},".ts","、",[63,223,224],{},".js",[63,226,227],{},".tsx",[63,229,230],{},".jsx",[63,232,233],{},".json",[63,235,236],{},".markdown","（代码块）。",[28,239,240,243,244,247,248,251,252,221,255,258],{},[214,241,242],{},"配置","：可在 ",[63,245,246],{},"deno.json"," 中通过 ",[63,249,250],{},"\"fmt\""," 字段自定义（如 ",[63,253,254],{},"\"indentWidth\": 4",[63,256,257],{},"\"lineWidth\": 120"," 等）。",[145,260,262,263,265],{"id":261},"_2-deno-lint-代码检查","2. ",[63,264,78],{}," – 代码检查",[28,267,268],{},"静态分析代码，发现潜在的语法错误、风格问题或安全隐患。内置超过 100 条规则，支持自定义。",[160,270,272],{"className":162,"code":271,"language":164,"meta":165,"style":165},"deno lint                       # 检查所有源文件\ndeno lint --rules               # 列出所有可用规则\ndeno lint --fix                 # 自动修复部分可修复的问题\n",[63,273,274,284,296],{"__ignoreMap":165},[169,275,276,278,281],{"class":171,"line":172},[169,277,12],{"class":175},[169,279,280],{"class":178}," lint",[169,282,283],{"class":182},"                       # 检查所有源文件\n",[169,285,286,288,290,293],{"class":171,"line":186},[169,287,12],{"class":175},[169,289,280],{"class":178},[169,291,292],{"class":193}," --rules",[169,294,295],{"class":182},"               # 列出所有可用规则\n",[169,297,298,300,302,305],{"class":171,"line":200},[169,299,12],{"class":175},[169,301,280],{"class":178},[169,303,304],{"class":193}," --fix",[169,306,307],{"class":182},"                 # 自动修复部分可修复的问题\n",[28,309,310,217],{},[214,311,312],{},"忽略检查",[160,314,318],{"className":315,"code":316,"language":317,"meta":165,"style":165},"language-typescript shiki shiki-themes material-theme-lighter github-light github-dark","\u002F\u002F 忽略整个文件\n\u002F\u002F deno-lint-ignore-file -- reason\n\n\u002F\u002F 忽略下一行\n\u002F\u002F deno-lint-ignore no-explicit-any\nconst data: any = {};\n","typescript",[63,319,320,325,330,336,342,348],{"__ignoreMap":165},[169,321,322],{"class":171,"line":172},[169,323,324],{"class":182},"\u002F\u002F 忽略整个文件\n",[169,326,327],{"class":171,"line":186},[169,328,329],{"class":182},"\u002F\u002F deno-lint-ignore-file -- reason\n",[169,331,332],{"class":171,"line":200},[169,333,335],{"emptyLinePlaceholder":334},true,"\n",[169,337,339],{"class":171,"line":338},4,[169,340,341],{"class":182},"\u002F\u002F 忽略下一行\n",[169,343,345],{"class":171,"line":344},5,[169,346,347],{"class":182},"\u002F\u002F deno-lint-ignore no-explicit-any\n",[169,349,351,355,359,363,367,370],{"class":171,"line":350},6,[169,352,354],{"class":353},"sbsja","const",[169,356,358],{"class":357},"s_hVV"," data",[169,360,362],{"class":361},"smGrS",":",[169,364,366],{"class":365},"sZMiF"," any",[169,368,369],{"class":361}," =",[169,371,373],{"class":372},"sP7_E"," {};\n",[145,375,377,378,380],{"id":376},"_3-deno-test-测试","3. ",[63,379,91],{}," – 测试",[28,382,383,384,221,387,221,390,221,393,396],{},"自动发现并运行测试文件（命名模式：",[63,385,386],{},"*_test.ts",[63,388,389],{},"*.test.ts",[63,391,392],{},"*_test.js",[63,394,395],{},"*.test.js","）。",[28,398,399,402,403,406],{},[214,400,401],{},"编写测试","（内置断言库可从 ",[63,404,405],{},"jsr:@std\u002Fassert"," 引入）：",[160,408,410],{"className":315,"code":409,"language":317,"meta":165,"style":165},"import { assertEquals } from \"jsr:@std\u002Fassert\";\n\nDeno.test(\"adds 1 + 2 to equal 3\", () => {\n  assertEquals(1 + 2, 3);\n});\n",[63,411,412,443,447,481,509],{"__ignoreMap":165},[169,413,414,418,421,425,428,431,435,437,440],{"class":171,"line":172},[169,415,417],{"class":416},"sVHd0","import",[169,419,420],{"class":372}," {",[169,422,424],{"class":423},"su5hD"," assertEquals",[169,426,427],{"class":372}," }",[169,429,430],{"class":416}," from",[169,432,434],{"class":433},"sjJ54"," \"",[169,436,405],{"class":178},[169,438,439],{"class":433},"\"",[169,441,442],{"class":372},";\n",[169,444,445],{"class":171,"line":186},[169,446,335],{"emptyLinePlaceholder":334},[169,448,449,452,455,459,462,464,467,469,472,475,478],{"class":171,"line":200},[169,450,451],{"class":423},"Deno",[169,453,454],{"class":372},".",[169,456,458],{"class":457},"sGLFI","test",[169,460,461],{"class":423},"(",[169,463,439],{"class":433},[169,465,466],{"class":178},"adds 1 + 2 to equal 3",[169,468,439],{"class":433},[169,470,471],{"class":372},",",[169,473,474],{"class":372}," ()",[169,476,477],{"class":353}," =>",[169,479,480],{"class":372}," {\n",[169,482,483,486,489,493,496,499,501,504,507],{"class":171,"line":338},[169,484,485],{"class":457},"  assertEquals",[169,487,461],{"class":488},"skxfh",[169,490,492],{"class":491},"srdBf","1",[169,494,495],{"class":361}," +",[169,497,498],{"class":491}," 2",[169,500,471],{"class":372},[169,502,503],{"class":491}," 3",[169,505,506],{"class":488},")",[169,508,442],{"class":372},[169,510,511,514,516],{"class":171,"line":344},[169,512,513],{"class":372},"}",[169,515,506],{"class":423},[169,517,442],{"class":372},[28,519,520,217],{},[214,521,522],{},"运行测试",[160,524,526],{"className":162,"code":525,"language":164,"meta":165,"style":165},"deno test                      # 运行所有测试\ndeno test --watch              # 监听并自动重跑\ndeno test --allow-net          # 授予网络权限（如果需要）\ndeno test --coverage           # 运行测试并输出覆盖率数据到 .\u002Fcoverage\n",[63,527,528,538,549,561],{"__ignoreMap":165},[169,529,530,532,535],{"class":171,"line":172},[169,531,12],{"class":175},[169,533,534],{"class":178}," test",[169,536,537],{"class":182},"                      # 运行所有测试\n",[169,539,540,542,544,546],{"class":171,"line":186},[169,541,12],{"class":175},[169,543,534],{"class":178},[169,545,207],{"class":193},[169,547,548],{"class":182},"              # 监听并自动重跑\n",[169,550,551,553,555,558],{"class":171,"line":200},[169,552,12],{"class":175},[169,554,534],{"class":178},[169,556,557],{"class":193}," --allow-net",[169,559,560],{"class":182},"          # 授予网络权限（如果需要）\n",[169,562,563,565,567,570],{"class":171,"line":338},[169,564,12],{"class":175},[169,566,534],{"class":178},[169,568,569],{"class":193}," --coverage",[169,571,572],{"class":182},"           # 运行测试并输出覆盖率数据到 .\u002Fcoverage\n",[145,574,576,577,579],{"id":575},"_4-deno-coverage-覆盖率报告","4. ",[63,578,104],{}," – 覆盖率报告",[28,581,582,583,586],{},"基于 ",[63,584,585],{},"deno test --coverage"," 生成的覆盖率数据，可视化报告。",[160,588,590],{"className":162,"code":589,"language":164,"meta":165,"style":165},"deno test --coverage           # 生成覆盖率（默认输出到 .\u002Fcoverage）\ndeno coverage                  # 在终端显示精简报告\ndeno coverage --html           # 生成 HTML 详细报告（打开 .\u002Fcoverage\u002Fhtml\u002Findex.html）\ndeno coverage --lcov           # 输出 LCOV 格式（供 CI 上传）\n",[63,591,592,603,613,625],{"__ignoreMap":165},[169,593,594,596,598,600],{"class":171,"line":172},[169,595,12],{"class":175},[169,597,534],{"class":178},[169,599,569],{"class":193},[169,601,602],{"class":182},"           # 生成覆盖率（默认输出到 .\u002Fcoverage）\n",[169,604,605,607,610],{"class":171,"line":186},[169,606,12],{"class":175},[169,608,609],{"class":178}," coverage",[169,611,612],{"class":182},"                  # 在终端显示精简报告\n",[169,614,615,617,619,622],{"class":171,"line":200},[169,616,12],{"class":175},[169,618,609],{"class":178},[169,620,621],{"class":193}," --html",[169,623,624],{"class":182},"           # 生成 HTML 详细报告（打开 .\u002Fcoverage\u002Fhtml\u002Findex.html）\n",[169,626,627,629,631,634],{"class":171,"line":338},[169,628,12],{"class":175},[169,630,609],{"class":178},[169,632,633],{"class":193}," --lcov",[169,635,636],{"class":182},"           # 输出 LCOV 格式（供 CI 上传）\n",[145,638,640,641,643],{"id":639},"_5-deno-doc-文档生成","5. ",[63,642,117],{}," – 文档生成",[28,645,646],{},"从源代码中的 JSDoc 风格注释生成 API 文档。",[160,648,650],{"className":162,"code":649,"language":164,"meta":165,"style":165},"deno doc .\u002Fmod.ts              # 输出文档（JSON 格式）\ndeno doc --html .\u002Fmod.ts       # 生成 HTML 站点\ndeno doc --json .\u002Fmod.ts > docs.json   # 导出 JSON 供其他工具处理\n",[63,651,652,665,678],{"__ignoreMap":165},[169,653,654,656,659,662],{"class":171,"line":172},[169,655,12],{"class":175},[169,657,658],{"class":178}," doc",[169,660,661],{"class":178}," .\u002Fmod.ts",[169,663,664],{"class":182},"              # 输出文档（JSON 格式）\n",[169,666,667,669,671,673,675],{"class":171,"line":186},[169,668,12],{"class":175},[169,670,658],{"class":178},[169,672,621],{"class":193},[169,674,661],{"class":178},[169,676,677],{"class":182},"       # 生成 HTML 站点\n",[169,679,680,682,684,687,689,692,695],{"class":171,"line":200},[169,681,12],{"class":175},[169,683,658],{"class":178},[169,685,686],{"class":193}," --json",[169,688,661],{"class":178},[169,690,691],{"class":361}," >",[169,693,694],{"class":178}," docs.json",[169,696,697],{"class":182},"   # 导出 JSON 供其他工具处理\n",[28,699,700,217],{},[214,701,702],{},"代码注释示例",[160,704,706],{"className":315,"code":705,"language":317,"meta":165,"style":165},"\u002F** 计算两数之和。@param a - 第一个数 @param b - 第二个数 @returns 和 *\u002F\nexport function add(a: number, b: number): number {\n  return a + b;\n}\n",[63,707,708,745,783,796],{"__ignoreMap":165},[169,709,710,713,716,720,724,727,729,731,734,737,739,742],{"class":171,"line":172},[169,711,712],{"class":182},"\u002F** 计算两数之和。",[169,714,715],{"class":416},"@",[169,717,719],{"class":718},"sN_3T","param",[169,721,723],{"class":722},"sFwrP"," a",[169,725,726],{"class":182}," - 第一个数 ",[169,728,715],{"class":416},[169,730,719],{"class":718},[169,732,733],{"class":722}," b",[169,735,736],{"class":182}," - 第二个数 ",[169,738,715],{"class":416},[169,740,741],{"class":718},"returns",[169,743,744],{"class":182}," 和 *\u002F\n",[169,746,747,750,753,756,758,762,764,767,769,771,773,775,777,779,781],{"class":171,"line":186},[169,748,749],{"class":416},"export",[169,751,752],{"class":353}," function",[169,754,755],{"class":457}," add",[169,757,461],{"class":372},[169,759,761],{"class":760},"s99_P","a",[169,763,362],{"class":361},[169,765,766],{"class":365}," number",[169,768,471],{"class":372},[169,770,733],{"class":760},[169,772,362],{"class":361},[169,774,766],{"class":365},[169,776,506],{"class":372},[169,778,362],{"class":361},[169,780,766],{"class":365},[169,782,480],{"class":372},[169,784,785,788,790,792,794],{"class":171,"line":200},[169,786,787],{"class":416},"  return",[169,789,723],{"class":423},[169,791,495],{"class":361},[169,793,733],{"class":423},[169,795,442],{"class":372},[169,797,798],{"class":171,"line":338},[169,799,800],{"class":372},"}\n",[145,802,804,805,807],{"id":803},"_6-deno-bench-基准测试","6. ",[63,806,130],{}," – 基准测试",[28,809,810,811,813],{},"测量代码性能，类似于 ",[63,812,91],{}," 但用于性能测试。",[160,815,817],{"className":315,"code":816,"language":317,"meta":165,"style":165},"\u002F\u002F bench.ts\nDeno.bench(\"Array sort\", () => {\n  const arr = [5, 1, 8, 3];\n  arr.sort();\n});\n",[63,818,819,824,850,885,900],{"__ignoreMap":165},[169,820,821],{"class":171,"line":172},[169,822,823],{"class":182},"\u002F\u002F bench.ts\n",[169,825,826,828,830,833,835,837,840,842,844,846,848],{"class":171,"line":186},[169,827,451],{"class":423},[169,829,454],{"class":372},[169,831,832],{"class":457},"bench",[169,834,461],{"class":423},[169,836,439],{"class":433},[169,838,839],{"class":178},"Array sort",[169,841,439],{"class":433},[169,843,471],{"class":372},[169,845,474],{"class":372},[169,847,477],{"class":353},[169,849,480],{"class":372},[169,851,852,855,858,860,863,866,868,871,873,876,878,880,883],{"class":171,"line":200},[169,853,854],{"class":353},"  const",[169,856,857],{"class":357}," arr",[169,859,369],{"class":361},[169,861,862],{"class":488}," [",[169,864,865],{"class":491},"5",[169,867,471],{"class":372},[169,869,870],{"class":491}," 1",[169,872,471],{"class":372},[169,874,875],{"class":491}," 8",[169,877,471],{"class":372},[169,879,503],{"class":491},[169,881,882],{"class":488},"]",[169,884,442],{"class":372},[169,886,887,890,892,895,898],{"class":171,"line":338},[169,888,889],{"class":423},"  arr",[169,891,454],{"class":372},[169,893,894],{"class":457},"sort",[169,896,897],{"class":488},"()",[169,899,442],{"class":372},[169,901,902,904,906],{"class":171,"line":344},[169,903,513],{"class":372},[169,905,506],{"class":423},[169,907,442],{"class":372},[160,909,911],{"className":162,"code":910,"language":164,"meta":165,"style":165},"deno bench                    # 运行所有基准测试\ndeno bench --watch\n",[63,912,913,923],{"__ignoreMap":165},[169,914,915,917,920],{"class":171,"line":172},[169,916,12],{"class":175},[169,918,919],{"class":178}," bench",[169,921,922],{"class":182},"                    # 运行所有基准测试\n",[169,924,925,927,929],{"class":171,"line":186},[169,926,12],{"class":175},[169,928,919],{"class":178},[169,930,931],{"class":193}," --watch\n",[28,933,934],{},"输出示例：",[160,936,941],{"className":937,"code":939,"language":940},[938],"language-text","cpu: 12th Gen Intel(R) Core(TM) i7-1260P\nruntime: deno 2.6.0 (x86_64-unknown-linux-gnu)\n\nbenchmark      time (avg)   iterations\nArray sort     1.5 µs       1000000\n","text",[63,942,939],{"__ignoreMap":165},[31,944,946],{"id":945},"三与-nodejs-工具链对比总结","三、与 Node.js 工具链对比总结",[36,948,949,962],{},[39,950,951],{},[42,952,953,956,959],{},[45,954,955],{},"功能",[45,957,958],{},"Deno 内置命令",[45,960,961],{},"Node.js 常见工具",[55,963,964,975,986,998,1010,1021],{},[42,965,966,969,973],{},[60,967,968],{},"格式化",[60,970,971],{},[63,972,65],{},[60,974,71],{},[42,976,977,980,984],{},[60,978,979],{},"代码检查",[60,981,982],{},[63,983,78],{},[60,985,84],{},[42,987,988,991,995],{},[60,989,990],{},"测试",[60,992,993],{},[63,994,91],{},[60,996,997],{},"Jest \u002F Mocha \u002F Vitest",[42,999,1000,1003,1007],{},[60,1001,1002],{},"覆盖率",[60,1004,1005],{},[63,1006,104],{},[60,1008,1009],{},"c8 \u002F nyc \u002F Jest coverage",[42,1011,1012,1015,1019],{},[60,1013,1014],{},"文档生成",[60,1016,1017],{},[63,1018,117],{},[60,1020,123],{},[42,1022,1023,1026,1030],{},[60,1024,1025],{},"基准测试",[60,1027,1028],{},[63,1029,130],{},[60,1031,1032,1033],{},"benchmark.js \u002F ",[63,1034,1035],{},"benchmark",[28,1037,1038,1039,1042],{},"Deno 的一体化工具链显著降低了项目初始配置成本，且所有命令都遵循相同的 CLI 风格（如 ",[63,1040,1041],{},"--watch","），体验统一。对于习惯了 Node.js 的开发者，迁移学习曲线较低，同时省去了单独配置 Prettier、ESLint、Jest 等工具的步骤。",[23,1044,1045],{"id":1045},"参考文献",[36,1047,1048,1057],{},[39,1049,1050],{},[42,1051,1052,1055],{},[45,1053,1054],{},"资料",[45,1056,50],{},[55,1058,1059,1070,1081,1091],{},[42,1060,1061,1068],{},[60,1062,1063],{},[761,1064,65],{"href":1065,"rel":1066},"https:\u002F\u002Fdocs.deno.com\u002Fruntime\u002Freference\u002Fcli\u002Ffmt\u002F",[1067],"nofollow",[60,1069,968],{},[42,1071,1072,1078],{},[60,1073,1074],{},[761,1075,78],{"href":1076,"rel":1077},"https:\u002F\u002Fdocs.deno.com\u002Fruntime\u002Freference\u002Fcli\u002Flint\u002F",[1067],[60,1079,1080],{},"Lint",[42,1082,1083,1089],{},[60,1084,1085],{},[761,1086,91],{"href":1087,"rel":1088},"https:\u002F\u002Fdocs.deno.com\u002Fruntime\u002Ffundamentals\u002Ftesting\u002F",[1067],[60,1090,990],{},[42,1092,1093,1100],{},[60,1094,1095],{},[761,1096,1099],{"href":1097,"rel":1098},"https:\u002F\u002Fjsr.io\u002F@std\u002Fassert",[1067],"@std\u002Fassert (JSR)",[60,1101,1102],{},"断言库",[1104,1105,1106],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sN_3T, html code.shiki .sN_3T{--shiki-light:#9C3EDA;--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 .sFwrP, html code.shiki .sFwrP{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#24292E;--shiki-default-font-style:inherit;--shiki-dark:#E1E4E8;--shiki-dark-font-style:inherit}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}",{"title":165,"searchDepth":186,"depth":186,"links":1108},[1109,1114],{"id":25,"depth":186,"text":26,"children":1110},[1111,1112,1113],{"id":33,"depth":200,"text":34},{"id":142,"depth":200,"text":143},{"id":945,"depth":200,"text":946},{"id":1045,"depth":186,"text":1045},{"title":8,"description":9},"knowledge\u002Fbooklet\u002Fend\u002FDeno\u002Ftools","knowledge\u002Fknowledge\u002Fbooklet\u002Fend\u002FDeno\u002Ftools.md","md",{"items":1120},[1121,1125,1129,1133,1137,1141],{"path":1122,"title":1123,"description":1124,"category":10,"score":350},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fbase","Deno 基础","Deno 是基于 V8 与 Rust 的 JavaScript\u002FTypeScript 运行时，由 Node.js 原作者 Ryan Dahl 发起。官方文档：docs.deno.com。与 Node、Bun 的对比见 运行时对比。",{"path":1126,"title":1127,"description":1128,"category":10,"score":350},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Finit","项目初始化与基础命令","Deno 提供了开箱即用的项目管理工具集，无需额外配置即可初始化项目、运行脚本、执行代码片段等。",{"path":1130,"title":1131,"description":1132,"category":10,"score":350},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fpackage","包管理与依赖","Deno 以 deno.json 管理项目（imports、tasks 等），依赖通过 URL、jsr:、npm: 解析并缓存到本地（默认 DENO_DIR），通常不需要像 Node 那样维护庞大的 node_modules 树。在需…",{"path":1134,"title":1135,"description":1136,"category":10,"score":350},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fother","其他配置","Deno 默认禁止访问环境变量，以遵循最小权限原则。必须通过 --allow-env 标志显式开启。",{"path":1138,"title":1139,"description":1140,"category":10,"score":350},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fauth","权限模型","Deno 默认在安全的沙盒环境中执行任何代码——无论是你的主程序还是第三方依赖，都没有文件、网络、环境变量或子进程的访问权限。只有通过 命令行标志显式授予 的权限才能被使用。",{"path":1142,"title":1143,"description":1144,"category":10,"score":350},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Finstall","安装与环境","Deno 提供了多种安装方式，覆盖主流操作系统。安装后需确保环境 PATH 正确，并可配置一些环境变量以控制行为。",{"series":1146,"title":12,"items":1147,"index":1165,"prev":1166,"next":1167},"booklet\u002Fend\u002Fdeno",[1148,1150,1152,1156,1158,1160,1162,1164],{"path":1138,"title":1139,"date":1149,"pinned":15},"2021-04-01",{"path":1122,"title":1123,"date":1151,"pinned":15},"2026-06-01",{"path":1153,"title":1154,"date":1155,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fhttp","HTTP 服务器","2020-12-11",{"path":1126,"title":1127,"date":1157,"pinned":15},"2025-02-14",{"path":1142,"title":1143,"date":1159,"pinned":15},"2021-02-05",{"path":1134,"title":1135,"date":1161,"pinned":15},"2022-02-08",{"path":1130,"title":1131,"date":1163,"pinned":15},"2024-07-21",{"path":7,"title":8,"date":14,"pinned":15},7,{"path":1130,"title":1131,"date":1163,"pinned":15},null]