[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fother":3,"knowledge-related-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fother":1249,"knowledge-series-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fother":1275},{"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":1245,"stem":1246,"id":1247,"extension":1248},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fother","其他配置","Deno 默认禁止访问环境变量，以遵循最小权限原则。必须通过 --allow-env 标志显式开启。","技能小册",[12],"deno","2022-02-08",false,{"type":16,"value":17,"toc":1236},"minimark",[18,21,26,31,40,45,353,360,398,406,416,422,437,442,507,513,604,609,617,621,632,636,686,691,714,718,724,957,960,964,968,1007,1011,1082,1087,1104,1108,1171,1174,1177,1232],[19,20,8],"h1",{"id":8},[22,23,25],"h2",{"id":24},"deno-环境变量调试与升级卸载","Deno 环境变量、调试与升级卸载",[27,28,30],"h3",{"id":29},"一环境变量","一、环境变量",[32,33,34,35,39],"p",{},"Deno 默认禁止访问环境变量，以遵循最小权限原则。必须通过 ",[36,37,38],"code",{},"--allow-env"," 标志显式开启。",[41,42,44],"h4",{"id":43},"_1-基本操作","1. 基本操作",[46,47,52],"pre",{"className":48,"code":49,"language":50,"meta":51,"style":51},"language-typescript shiki shiki-themes material-theme-lighter github-light github-dark","\u002F\u002F 需要 --allow-env 权限\nconst apiKey = Deno.env.get(\"API_KEY\");\nconsole.log(apiKey);\n\n\u002F\u002F 设置环境变量（仅在当前进程生效）\nDeno.env.set(\"DEBUG\", \"true\");\n\n\u002F\u002F 删除环境变量\nDeno.env.delete(\"TEMP_VAR\");\n\n\u002F\u002F 检查是否存在某个变量\nif (Deno.env.has(\"PATH\")) {\n  console.log(\"PATH exists\");\n}\n\n\u002F\u002F 获取所有环境变量（返回对象）\nconst allEnv = Deno.env.toObject();\nconsole.log(allEnv.HOME);\n","typescript","",[36,53,54,63,114,130,137,143,182,187,193,220,225,231,265,289,295,300,306,332],{"__ignoreMap":51},[55,56,59],"span",{"class":57,"line":58},"line",1,[55,60,62],{"class":61},"sutJx","\u002F\u002F 需要 --allow-env 权限\n",[55,64,66,70,74,78,82,86,89,91,95,98,102,106,108,111],{"class":57,"line":65},2,[55,67,69],{"class":68},"sbsja","const",[55,71,73],{"class":72},"s_hVV"," apiKey",[55,75,77],{"class":76},"smGrS"," =",[55,79,81],{"class":80},"su5hD"," Deno",[55,83,85],{"class":84},"sP7_E",".",[55,87,88],{"class":80},"env",[55,90,85],{"class":84},[55,92,94],{"class":93},"sGLFI","get",[55,96,97],{"class":80},"(",[55,99,101],{"class":100},"sjJ54","\"",[55,103,105],{"class":104},"s_sjI","API_KEY",[55,107,101],{"class":100},[55,109,110],{"class":80},")",[55,112,113],{"class":84},";\n",[55,115,117,120,122,125,128],{"class":57,"line":116},3,[55,118,119],{"class":80},"console",[55,121,85],{"class":84},[55,123,124],{"class":93},"log",[55,126,127],{"class":80},"(apiKey)",[55,129,113],{"class":84},[55,131,133],{"class":57,"line":132},4,[55,134,136],{"emptyLinePlaceholder":135},true,"\n",[55,138,140],{"class":57,"line":139},5,[55,141,142],{"class":61},"\u002F\u002F 设置环境变量（仅在当前进程生效）\n",[55,144,146,149,151,153,155,158,160,162,165,167,170,173,176,178,180],{"class":57,"line":145},6,[55,147,148],{"class":80},"Deno",[55,150,85],{"class":84},[55,152,88],{"class":80},[55,154,85],{"class":84},[55,156,157],{"class":93},"set",[55,159,97],{"class":80},[55,161,101],{"class":100},[55,163,164],{"class":104},"DEBUG",[55,166,101],{"class":100},[55,168,169],{"class":84},",",[55,171,172],{"class":100}," \"",[55,174,175],{"class":104},"true",[55,177,101],{"class":100},[55,179,110],{"class":80},[55,181,113],{"class":84},[55,183,185],{"class":57,"line":184},7,[55,186,136],{"emptyLinePlaceholder":135},[55,188,190],{"class":57,"line":189},8,[55,191,192],{"class":61},"\u002F\u002F 删除环境变量\n",[55,194,196,198,200,202,204,207,209,211,214,216,218],{"class":57,"line":195},9,[55,197,148],{"class":80},[55,199,85],{"class":84},[55,201,88],{"class":80},[55,203,85],{"class":84},[55,205,206],{"class":93},"delete",[55,208,97],{"class":80},[55,210,101],{"class":100},[55,212,213],{"class":104},"TEMP_VAR",[55,215,101],{"class":100},[55,217,110],{"class":80},[55,219,113],{"class":84},[55,221,223],{"class":57,"line":222},10,[55,224,136],{"emptyLinePlaceholder":135},[55,226,228],{"class":57,"line":227},11,[55,229,230],{"class":61},"\u002F\u002F 检查是否存在某个变量\n",[55,232,234,238,241,243,245,247,250,252,254,257,259,262],{"class":57,"line":233},12,[55,235,237],{"class":236},"sVHd0","if",[55,239,240],{"class":80}," (Deno",[55,242,85],{"class":84},[55,244,88],{"class":80},[55,246,85],{"class":84},[55,248,249],{"class":93},"has",[55,251,97],{"class":80},[55,253,101],{"class":100},[55,255,256],{"class":104},"PATH",[55,258,101],{"class":100},[55,260,261],{"class":80},")) ",[55,263,264],{"class":84},"{\n",[55,266,268,271,273,275,278,280,283,285,287],{"class":57,"line":267},13,[55,269,270],{"class":80},"  console",[55,272,85],{"class":84},[55,274,124],{"class":93},[55,276,97],{"class":277},"skxfh",[55,279,101],{"class":100},[55,281,282],{"class":104},"PATH exists",[55,284,101],{"class":100},[55,286,110],{"class":277},[55,288,113],{"class":84},[55,290,292],{"class":57,"line":291},14,[55,293,294],{"class":84},"}\n",[55,296,298],{"class":57,"line":297},15,[55,299,136],{"emptyLinePlaceholder":135},[55,301,303],{"class":57,"line":302},16,[55,304,305],{"class":61},"\u002F\u002F 获取所有环境变量（返回对象）\n",[55,307,309,311,314,316,318,320,322,324,327,330],{"class":57,"line":308},17,[55,310,69],{"class":68},[55,312,313],{"class":72}," allEnv",[55,315,77],{"class":76},[55,317,81],{"class":80},[55,319,85],{"class":84},[55,321,88],{"class":80},[55,323,85],{"class":84},[55,325,326],{"class":93},"toObject",[55,328,329],{"class":80},"()",[55,331,113],{"class":84},[55,333,335,337,339,341,344,346,349,351],{"class":57,"line":334},18,[55,336,119],{"class":80},[55,338,85],{"class":84},[55,340,124],{"class":93},[55,342,343],{"class":80},"(allEnv",[55,345,85],{"class":84},[55,347,348],{"class":72},"HOME",[55,350,110],{"class":80},[55,352,113],{"class":84},[32,354,355,359],{},[356,357,358],"strong",{},"运行","：",[46,361,365],{"className":362,"code":363,"language":364,"meta":51,"style":51},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","deno run --allow-env env-demo.ts\n# 或只允许特定变量（可提供逗号分隔的列表）\ndeno run --allow-env=API_KEY,DEBUG env-demo.ts\n","bash",[36,366,367,382,387],{"__ignoreMap":51},[55,368,369,372,375,379],{"class":57,"line":58},[55,370,12],{"class":371},"sbgvK",[55,373,374],{"class":104}," run",[55,376,378],{"class":377},"stzsN"," --allow-env",[55,380,381],{"class":104}," env-demo.ts\n",[55,383,384],{"class":57,"line":65},[55,385,386],{"class":61},"# 或只允许特定变量（可提供逗号分隔的列表）\n",[55,388,389,391,393,396],{"class":57,"line":116},[55,390,12],{"class":371},[55,392,374],{"class":104},[55,394,395],{"class":377}," --allow-env=API_KEY,DEBUG",[55,397,381],{"class":104},[41,399,401,402,405],{"id":400},"_2-加载-env-文件推荐使用标准库","2. 加载 ",[36,403,404],{},".env"," 文件（推荐使用标准库）",[32,407,408,409,412,413,415],{},"Deno 官方标准库 ",[36,410,411],{},"@std\u002Fdotenv"," 提供了加载 ",[36,414,404],{}," 文件的功能。",[32,417,418,421],{},[356,419,420],{},"安装","（在项目中）：",[46,423,425],{"className":362,"code":424,"language":364,"meta":51,"style":51},"deno add jsr:@std\u002Fdotenv\n",[36,426,427],{"__ignoreMap":51},[55,428,429,431,434],{"class":57,"line":58},[55,430,12],{"class":371},[55,432,433],{"class":104}," add",[55,435,436],{"class":104}," jsr:@std\u002Fdotenv\n",[32,438,439,359],{},[356,440,441],{},"使用",[46,443,445],{"className":48,"code":444,"language":50,"meta":51,"style":51},"\u002F\u002F 在程序入口文件顶部导入\nimport \"jsr:@std\u002Fdotenv\u002Fload\";\n\nconsole.log(Deno.env.get(\"MY_VAR\")); \u002F\u002F 从 .env 文件加载的值\n",[36,446,447,452,466,470],{"__ignoreMap":51},[55,448,449],{"class":57,"line":58},[55,450,451],{"class":61},"\u002F\u002F 在程序入口文件顶部导入\n",[55,453,454,457,459,462,464],{"class":57,"line":65},[55,455,456],{"class":236},"import",[55,458,172],{"class":100},[55,460,461],{"class":104},"jsr:@std\u002Fdotenv\u002Fload",[55,463,101],{"class":100},[55,465,113],{"class":84},[55,467,468],{"class":57,"line":116},[55,469,136],{"emptyLinePlaceholder":135},[55,471,472,474,476,478,481,483,485,487,489,491,493,496,498,501,504],{"class":57,"line":132},[55,473,119],{"class":80},[55,475,85],{"class":84},[55,477,124],{"class":93},[55,479,480],{"class":80},"(Deno",[55,482,85],{"class":84},[55,484,88],{"class":80},[55,486,85],{"class":84},[55,488,94],{"class":93},[55,490,97],{"class":80},[55,492,101],{"class":100},[55,494,495],{"class":104},"MY_VAR",[55,497,101],{"class":100},[55,499,500],{"class":80},"))",[55,502,503],{"class":84},";",[55,505,506],{"class":61}," \u002F\u002F 从 .env 文件加载的值\n",[32,508,509,510,512],{},"默认查找 ",[36,511,404],{}," 文件，也可指定路径：",[46,514,516],{"className":48,"code":515,"language":50,"meta":51,"style":51},"import { load } from \"jsr:@std\u002Fdotenv\";\n\nconst env = await load({ envPath: \".\u002Fconfig\u002F.env.production\" });\nconsole.log(env.MY_VAR);\n",[36,517,518,543,547,585],{"__ignoreMap":51},[55,519,520,522,525,528,531,534,536,539,541],{"class":57,"line":58},[55,521,456],{"class":236},[55,523,524],{"class":84}," {",[55,526,527],{"class":80}," load",[55,529,530],{"class":84}," }",[55,532,533],{"class":236}," from",[55,535,172],{"class":100},[55,537,538],{"class":104},"jsr:@std\u002Fdotenv",[55,540,101],{"class":100},[55,542,113],{"class":84},[55,544,545],{"class":57,"line":65},[55,546,136],{"emptyLinePlaceholder":135},[55,548,549,551,554,556,559,561,563,566,569,572,574,577,579,581,583],{"class":57,"line":116},[55,550,69],{"class":68},[55,552,553],{"class":72}," env",[55,555,77],{"class":76},[55,557,558],{"class":236}," await",[55,560,527],{"class":93},[55,562,97],{"class":80},[55,564,565],{"class":84},"{",[55,567,568],{"class":277}," envPath",[55,570,571],{"class":84},":",[55,573,172],{"class":100},[55,575,576],{"class":104},".\u002Fconfig\u002F.env.production",[55,578,101],{"class":100},[55,580,530],{"class":84},[55,582,110],{"class":80},[55,584,113],{"class":84},[55,586,587,589,591,593,596,598,600,602],{"class":57,"line":132},[55,588,119],{"class":80},[55,590,85],{"class":84},[55,592,124],{"class":93},[55,594,595],{"class":80},"(env",[55,597,85],{"class":84},[55,599,495],{"class":72},[55,601,110],{"class":80},[55,603,113],{"class":84},[32,605,606,359],{},[356,607,608],{},".env 文件示例",[46,610,615],{"className":611,"code":613,"language":614},[612],"language-text","API_KEY=abc123\nDB_URL=postgres:\u002F\u002Flocalhost\u002Fmydb\nDEBUG=true\n","text",[36,616,613],{"__ignoreMap":51},[27,618,620],{"id":619},"二调试","二、调试",[32,622,623,624,627,628,631],{},"Deno 内置了与 Chrome DevTools 等工具兼容的调试器，通过 ",[36,625,626],{},"--inspect"," 或 ",[36,629,630],{},"--inspect-brk"," 标志启用。",[41,633,635],{"id":634},"_1-基本调试命令","1. 基本调试命令",[637,638,639,652],"table",{},[640,641,642],"thead",{},[643,644,645,649],"tr",{},[646,647,648],"th",{},"命令",[646,650,651],{},"说明",[653,654,655,666,676],"tbody",{},[643,656,657,663],{},[658,659,660],"td",{},[36,661,662],{},"deno run --inspect --allow-net server.ts",[658,664,665],{},"启动调试器，监听默认端口 9229，不会暂停",[643,667,668,673],{},[658,669,670],{},[36,671,672],{},"deno run --inspect-brk --allow-net server.ts",[658,674,675],{},"在第一行代码前暂停，等待调试器连接",[643,677,678,683],{},[658,679,680],{},[36,681,682],{},"deno run --inspect=127.0.0.1:9999 --allow-net server.ts",[658,684,685],{},"指定监听地址和端口",[32,687,688,359],{},[356,689,690],{},"配合 Chrome DevTools",[692,693,694,701,707],"ol",{},[695,696,697,698],"li",{},"运行 ",[36,699,700],{},"deno run --inspect-brk server.ts",[695,702,703,704],{},"打开 Chrome 浏览器，地址栏输入 ",[36,705,706],{},"chrome:\u002F\u002Finspect",[695,708,709,710,713],{},"在 “Remote Target” 列表中找到 Deno 进程，点击 ",[356,711,712],{},"inspect","，即可开始调试（断点、单步、变量查看等）。",[41,715,717],{"id":716},"_2-使用-vs-code-调试","2. 使用 VS Code 调试",[32,719,720,721,359],{},"在项目根目录创建 ",[36,722,723],{},".vscode\u002Flaunch.json",[46,725,729],{"className":726,"code":727,"language":728,"meta":51,"style":51},"language-json shiki shiki-themes material-theme-lighter github-light github-dark","{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"name\": \"Deno\",\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"cwd\": \"${workspaceFolder}\",\n      \"runtimeExecutable\": \"deno\",\n      \"runtimeArgs\": [\"run\", \"--inspect-brk\", \"--allow-all\", \"main.ts\"],\n      \"attachSimplePort\": 9229\n    }\n  ]\n}\n","json",[36,730,731,735,759,773,778,799,819,839,859,878,928,943,948,953],{"__ignoreMap":51},[55,732,733],{"class":57,"line":58},[55,734,264],{"class":84},[55,736,737,741,745,747,749,751,754,756],{"class":57,"line":65},[55,738,740],{"class":739},"s39Yj","  \"",[55,742,744],{"class":743},"sseR_","version",[55,746,101],{"class":739},[55,748,571],{"class":84},[55,750,172],{"class":100},[55,752,753],{"class":104},"0.2.0",[55,755,101],{"class":100},[55,757,758],{"class":84},",\n",[55,760,761,763,766,768,770],{"class":57,"line":116},[55,762,740],{"class":739},[55,764,765],{"class":743},"configurations",[55,767,101],{"class":739},[55,769,571],{"class":84},[55,771,772],{"class":84}," [\n",[55,774,775],{"class":57,"line":132},[55,776,777],{"class":84},"    {\n",[55,779,780,783,787,789,791,793,795,797],{"class":57,"line":139},[55,781,782],{"class":739},"      \"",[55,784,786],{"class":785},"sZMiF","name",[55,788,101],{"class":739},[55,790,571],{"class":84},[55,792,172],{"class":100},[55,794,148],{"class":104},[55,796,101],{"class":100},[55,798,758],{"class":84},[55,800,801,803,806,808,810,812,815,817],{"class":57,"line":145},[55,802,782],{"class":739},[55,804,805],{"class":785},"type",[55,807,101],{"class":739},[55,809,571],{"class":84},[55,811,172],{"class":100},[55,813,814],{"class":104},"node",[55,816,101],{"class":100},[55,818,758],{"class":84},[55,820,821,823,826,828,830,832,835,837],{"class":57,"line":184},[55,822,782],{"class":739},[55,824,825],{"class":785},"request",[55,827,101],{"class":739},[55,829,571],{"class":84},[55,831,172],{"class":100},[55,833,834],{"class":104},"launch",[55,836,101],{"class":100},[55,838,758],{"class":84},[55,840,841,843,846,848,850,852,855,857],{"class":57,"line":189},[55,842,782],{"class":739},[55,844,845],{"class":785},"cwd",[55,847,101],{"class":739},[55,849,571],{"class":84},[55,851,172],{"class":100},[55,853,854],{"class":104},"${workspaceFolder}",[55,856,101],{"class":100},[55,858,758],{"class":84},[55,860,861,863,866,868,870,872,874,876],{"class":57,"line":195},[55,862,782],{"class":739},[55,864,865],{"class":785},"runtimeExecutable",[55,867,101],{"class":739},[55,869,571],{"class":84},[55,871,172],{"class":100},[55,873,12],{"class":104},[55,875,101],{"class":100},[55,877,758],{"class":84},[55,879,880,882,885,887,889,892,894,897,899,901,903,905,907,909,911,914,916,918,920,923,925],{"class":57,"line":222},[55,881,782],{"class":739},[55,883,884],{"class":785},"runtimeArgs",[55,886,101],{"class":739},[55,888,571],{"class":84},[55,890,891],{"class":84}," [",[55,893,101],{"class":100},[55,895,896],{"class":104},"run",[55,898,101],{"class":100},[55,900,169],{"class":84},[55,902,172],{"class":100},[55,904,630],{"class":104},[55,906,101],{"class":100},[55,908,169],{"class":84},[55,910,172],{"class":100},[55,912,913],{"class":104},"--allow-all",[55,915,101],{"class":100},[55,917,169],{"class":84},[55,919,172],{"class":100},[55,921,922],{"class":104},"main.ts",[55,924,101],{"class":100},[55,926,927],{"class":84},"],\n",[55,929,930,932,935,937,939],{"class":57,"line":227},[55,931,782],{"class":739},[55,933,934],{"class":785},"attachSimplePort",[55,936,101],{"class":739},[55,938,571],{"class":84},[55,940,942],{"class":941},"srdBf"," 9229\n",[55,944,945],{"class":57,"line":233},[55,946,947],{"class":84},"    }\n",[55,949,950],{"class":57,"line":267},[55,951,952],{"class":84},"  ]\n",[55,954,955],{"class":57,"line":291},[55,956,294],{"class":84},[32,958,959],{},"然后按 F5 启动调试。",[27,961,963],{"id":962},"三升级与卸载","三、升级与卸载",[41,965,967],{"id":966},"_1-升级-deno","1. 升级 Deno",[46,969,971],{"className":362,"code":970,"language":364,"meta":51,"style":51},"# 升级到最新稳定版\ndeno upgrade\n\n# 升级到特定版本\ndeno upgrade --version 1.45.0\n",[36,972,973,978,985,989,994],{"__ignoreMap":51},[55,974,975],{"class":57,"line":58},[55,976,977],{"class":61},"# 升级到最新稳定版\n",[55,979,980,982],{"class":57,"line":65},[55,981,12],{"class":371},[55,983,984],{"class":104}," upgrade\n",[55,986,987],{"class":57,"line":116},[55,988,136],{"emptyLinePlaceholder":135},[55,990,991],{"class":57,"line":132},[55,992,993],{"class":61},"# 升级到特定版本\n",[55,995,996,998,1001,1004],{"class":57,"line":139},[55,997,12],{"class":371},[55,999,1000],{"class":104}," upgrade",[55,1002,1003],{"class":377}," --version",[55,1005,1006],{"class":941}," 1.45.0\n",[41,1008,1010],{"id":1009},"_2-卸载-deno","2. 卸载 Deno",[637,1012,1013,1023],{},[640,1014,1015],{},[643,1016,1017,1020],{},[646,1018,1019],{},"平台",[646,1021,1022],{},"操作",[653,1024,1025,1044,1058,1070],{},[643,1026,1027,1033],{},[658,1028,1029,1032],{},[356,1030,1031],{},"macOS \u002F Linux","（通过安装脚本安装）",[658,1034,1035,1036,1039,1040,1043],{},"删除 ",[36,1037,1038],{},"~\u002F.deno"," 目录，并移除环境变量 PATH 中的 ",[36,1041,1042],{},"~\u002F.deno\u002Fbin"," 条目",[643,1045,1046,1052],{},[658,1047,1048,1051],{},[356,1049,1050],{},"Windows","（通过 PowerShell 安装）",[658,1053,1035,1054,1057],{},[36,1055,1056],{},"%USERPROFILE%\\.deno"," 目录",[643,1059,1060,1065],{},[658,1061,1062],{},[356,1063,1064],{},"Homebrew",[658,1066,1067],{},[36,1068,1069],{},"brew uninstall deno",[643,1071,1072,1077],{},[658,1073,1074],{},[356,1075,1076],{},"npm 全局安装",[658,1078,1079],{},[36,1080,1081],{},"npm uninstall -g deno",[32,1083,1084,359],{},[356,1085,1086],{},"验证是否已卸载",[46,1088,1090],{"className":362,"code":1089,"language":364,"meta":51,"style":51},"deno --version\n# 应提示 \"command not found\"\n",[36,1091,1092,1099],{"__ignoreMap":51},[55,1093,1094,1096],{"class":57,"line":58},[55,1095,12],{"class":371},[55,1097,1098],{"class":377}," --version\n",[55,1100,1101],{"class":57,"line":65},[55,1102,1103],{"class":61},"# 应提示 \"command not found\"\n",[27,1105,1107],{"id":1106},"四总结","四、总结",[637,1109,1110,1119],{},[640,1111,1112],{},[643,1113,1114,1116],{},[646,1115,1022],{},[646,1117,1118],{},"关键点",[653,1120,1121,1138,1148,1158],{},[643,1122,1123,1126],{},[658,1124,1125],{},"环境变量",[658,1127,1128,1129,1131,1132,1134,1135,1137],{},"需 ",[36,1130,38],{},"；推荐 ",[36,1133,411],{}," 加载 ",[36,1136,404],{}," 文件",[643,1139,1140,1143],{},[658,1141,1142],{},"调试",[658,1144,1145,1147],{},[36,1146,630],{}," + Chrome DevTools 或 VS Code 配置",[643,1149,1150,1153],{},[658,1151,1152],{},"升级",[658,1154,1155],{},[36,1156,1157],{},"deno upgrade",[643,1159,1160,1163],{},[658,1161,1162],{},"卸载",[658,1164,1165,1166,627,1168,1170],{},"删除安装目录（",[36,1167,1038],{},[36,1169,1056],{},"）",[32,1172,1173],{},"掌握这些技能，可以更高效地开发和调试 Deno 应用。",[22,1175,1176],{"id":1176},"参考文献",[637,1178,1179,1188],{},[640,1180,1181],{},[643,1182,1183,1186],{},[646,1184,1185],{},"资料",[646,1187,651],{},[653,1189,1190,1206,1220],{},[643,1191,1192,1201],{},[658,1193,1194],{},[1195,1196,1200],"a",{"href":1197,"rel":1198},"https:\u002F\u002Fdocs.deno.com\u002Fruntime\u002Freference\u002Fenv_variables\u002F",[1199],"nofollow","Environment variables",[658,1202,1203],{},[36,1204,1205],{},"Deno.env",[643,1207,1208,1215],{},[658,1209,1210],{},[1195,1211,1214],{"href":1212,"rel":1213},"https:\u002F\u002Fjsr.io\u002F@std\u002Fdotenv",[1199],"@std\u002Fdotenv (JSR)",[658,1216,1217,1218],{},"加载 ",[36,1219,404],{},[643,1221,1222,1229],{},[658,1223,1224],{},[1195,1225,1228],{"href":1226,"rel":1227},"https:\u002F\u002Fdocs.deno.com\u002Fruntime\u002Ffundamentals\u002Fdebugging\u002F",[1199],"Debugging",[658,1230,1231],{},"官方调试",[1233,1234,1235],"style",{},"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 .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 .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 .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .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 .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sseR_, html code.shiki .sseR_{--shiki-light:#9C3EDA;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":51,"searchDepth":65,"depth":65,"links":1237},[1238,1244],{"id":24,"depth":65,"text":25,"children":1239},[1240,1241,1242,1243],{"id":29,"depth":116,"text":30},{"id":619,"depth":116,"text":620},{"id":962,"depth":116,"text":963},{"id":1106,"depth":116,"text":1107},{"id":1176,"depth":65,"text":1176},{"title":8,"description":9},"knowledge\u002Fbooklet\u002Fend\u002FDeno\u002Fother","knowledge\u002Fknowledge\u002Fbooklet\u002Fend\u002FDeno\u002Fother.md","md",{"items":1250},[1251,1255,1259,1263,1267,1271],{"path":1252,"title":1253,"description":1254,"category":10,"score":145},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fbase","Deno 基础","Deno 是基于 V8 与 Rust 的 JavaScript\u002FTypeScript 运行时，由 Node.js 原作者 Ryan Dahl 发起。官方文档：docs.deno.com。与 Node、Bun 的对比见 运行时对比。",{"path":1256,"title":1257,"description":1258,"category":10,"score":145},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Ftools","内置工具链","Deno 提供了开箱即用的工具链，无需安装任何第三方依赖即可完成代码格式化、检查、测试、覆盖率、文档生成和基准测试等任务。",{"path":1260,"title":1261,"description":1262,"category":10,"score":145},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Finit","项目初始化与基础命令","Deno 提供了开箱即用的项目管理工具集，无需额外配置即可初始化项目、运行脚本、执行代码片段等。",{"path":1264,"title":1265,"description":1266,"category":10,"score":145},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fpackage","包管理与依赖","Deno 以 deno.json 管理项目（imports、tasks 等），依赖通过 URL、jsr:、npm: 解析并缓存到本地（默认 DENO_DIR），通常不需要像 Node 那样维护庞大的 node_modules 树。在需…",{"path":1268,"title":1269,"description":1270,"category":10,"score":145},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fauth","权限模型","Deno 默认在安全的沙盒环境中执行任何代码——无论是你的主程序还是第三方依赖，都没有文件、网络、环境变量或子进程的访问权限。只有通过 命令行标志显式授予 的权限才能被使用。",{"path":1272,"title":1273,"description":1274,"category":10,"score":145},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Finstall","安装与环境","Deno 提供了多种安装方式，覆盖主流操作系统。安装后需确保环境 PATH 正确，并可配置一些环境变量以控制行为。",{"series":1276,"title":12,"items":1277,"index":139,"prev":1295,"next":1296},"booklet\u002Fend\u002Fdeno",[1278,1280,1282,1286,1288,1290,1291,1293],{"path":1268,"title":1269,"date":1279,"pinned":14},"2021-04-01",{"path":1252,"title":1253,"date":1281,"pinned":14},"2026-06-01",{"path":1283,"title":1284,"date":1285,"pinned":14},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fhttp","HTTP 服务器","2020-12-11",{"path":1260,"title":1261,"date":1287,"pinned":14},"2025-02-14",{"path":1272,"title":1273,"date":1289,"pinned":14},"2021-02-05",{"path":7,"title":8,"date":13,"pinned":14},{"path":1264,"title":1265,"date":1292,"pinned":14},"2024-07-21",{"path":1256,"title":1257,"date":1294,"pinned":14},"2026-01-24",{"path":1272,"title":1273,"date":1289,"pinned":14},{"path":1264,"title":1265,"date":1292,"pinned":14}]