[{"data":1,"prerenderedAt":977},["ShallowReactive",2],{"doc-page:\u002Fdocs\u002Fpnpm-monorepo":3},{"doc":4,"prev":936,"next":943,"resolvedType":8,"readingMinutes":101,"audience":950,"checklist":954,"related":958},{"path":5,"title":6,"description":7,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13,"body":14},"\u002Fdocs\u002Fpnpm-monorepo","pnpm 与 Monorepo","pnpm 使用技巧、workspace 配置、Monorepo 项目管理与 Turborepo","article",null,"dev-environment","开发环境","2026-02-28","i-carbon-code",{"type":15,"value":16,"toc":912},"minimark",[17,21,30,35,38,54,57,61,70,74,130,133,258,262,301,305,308,316,320,351,354,357,374,377,380,452,455,520,523,534,538,545,562,727,767,770,774,777,795,798,801,835,838,842,845,859,862,882,885,908],[18,19,6],"h1",{"id":20},"pnpm-与-monorepo",[22,23,24,25,29],"p",{},"这页适合做“前端 \u002F 全栈工作区工程化起步指南”。",[26,27,28],"code",{},"pnpm"," 很适合单仓库，也很适合 Monorepo，但真正要先想清楚的不是工具命令，而是：你到底有没有共享包、统一构建和跨项目协作的需求。",[31,32,34],"h2",{"id":33},"什么时候适合-monorepo","什么时候适合 Monorepo",[22,36,37],{},"下面几类情况比较适合：",[39,40,41,45,48,51],"ul",{},[42,43,44],"li",{},"有多个应用共享 UI 组件、工具包、类型定义",[42,46,47],{},"Web、API、脚本、文档站希望统一管理",[42,49,50],{},"团队希望统一依赖版本、脚本入口和 CI 流程",[42,52,53],{},"需要按变更影响范围做增量构建",[22,55,56],{},"如果当前只有一个应用、没有共享代码、团队也不大，单仓库先保持简单往往更划算。",[31,58,60],{"id":59},"pnpm-基础","pnpm 基础",[22,62,63,69],{},[64,65,28],"a",{"href":66,"rel":67},"https:\u002F\u002Fpnpm.io\u002F",[68],"nofollow"," 使用硬链接和内容寻址存储，节省磁盘空间且安装速度快。",[71,72,73],"h3",{"id":73},"安装",[75,76,81],"pre",{"className":77,"code":78,"language":79,"meta":80,"style":80},"language-powershell shiki shiki-themes github-light github-dark","# Windows\nscoop install pnpm\n# 或\nwinget install pnpm.pnpm\n# 或通过 npm\nnpm install -g pnpm\n","powershell","",[26,82,83,92,99,105,111,117],{"__ignoreMap":80},[84,85,88],"span",{"class":86,"line":87},"line",1,[84,89,91],{"class":90},"sJ8bj","# Windows\n",[84,93,95],{"class":86,"line":94},2,[84,96,98],{"class":97},"sVt8B","scoop install pnpm\n",[84,100,102],{"class":86,"line":101},3,[84,103,104],{"class":90},"# 或\n",[84,106,108],{"class":86,"line":107},4,[84,109,110],{"class":97},"winget install pnpm.pnpm\n",[84,112,114],{"class":86,"line":113},5,[84,115,116],{"class":90},"# 或通过 npm\n",[84,118,120,123,127],{"class":86,"line":119},6,[84,121,122],{"class":97},"npm install ",[84,124,126],{"class":125},"szBVR","-",[84,128,129],{"class":97},"g pnpm\n",[71,131,132],{"id":132},"常用命令",[75,134,138],{"className":135,"code":136,"language":137,"meta":80,"style":80},"language-bash shiki shiki-themes github-light github-dark","pnpm add express              # 添加依赖\npnpm add -D vitest            # 开发依赖\npnpm add -g tsx               # 全局安装\npnpm remove express           # 移除\npnpm install                  # 安装所有依赖\npnpm update                   # 更新\npnpm update --latest          # 更新到最新（忽略 semver）\npnpm store prune              # 清理未引用的包\npnpm why express              # 查看为什么安装了某个包\n","bash",[26,139,140,155,171,186,198,208,218,231,245],{"__ignoreMap":80},[84,141,142,145,149,152],{"class":86,"line":87},[84,143,28],{"class":144},"sScJk",[84,146,148],{"class":147},"sZZnC"," add",[84,150,151],{"class":147}," express",[84,153,154],{"class":90},"              # 添加依赖\n",[84,156,157,159,161,165,168],{"class":86,"line":94},[84,158,28],{"class":144},[84,160,148],{"class":147},[84,162,164],{"class":163},"sj4cs"," -D",[84,166,167],{"class":147}," vitest",[84,169,170],{"class":90},"            # 开发依赖\n",[84,172,173,175,177,180,183],{"class":86,"line":101},[84,174,28],{"class":144},[84,176,148],{"class":147},[84,178,179],{"class":163}," -g",[84,181,182],{"class":147}," tsx",[84,184,185],{"class":90},"               # 全局安装\n",[84,187,188,190,193,195],{"class":86,"line":107},[84,189,28],{"class":144},[84,191,192],{"class":147}," remove",[84,194,151],{"class":147},[84,196,197],{"class":90},"           # 移除\n",[84,199,200,202,205],{"class":86,"line":113},[84,201,28],{"class":144},[84,203,204],{"class":147}," install",[84,206,207],{"class":90},"                  # 安装所有依赖\n",[84,209,210,212,215],{"class":86,"line":119},[84,211,28],{"class":144},[84,213,214],{"class":147}," update",[84,216,217],{"class":90},"                   # 更新\n",[84,219,221,223,225,228],{"class":86,"line":220},7,[84,222,28],{"class":144},[84,224,214],{"class":147},[84,226,227],{"class":163}," --latest",[84,229,230],{"class":90},"          # 更新到最新（忽略 semver）\n",[84,232,234,236,239,242],{"class":86,"line":233},8,[84,235,28],{"class":144},[84,237,238],{"class":147}," store",[84,240,241],{"class":147}," prune",[84,243,244],{"class":90},"              # 清理未引用的包\n",[84,246,248,250,253,255],{"class":86,"line":247},9,[84,249,28],{"class":144},[84,251,252],{"class":147}," why",[84,254,151],{"class":147},[84,256,257],{"class":90},"              # 查看为什么安装了某个包\n",[71,259,261],{"id":260},"npmrc-配置",".npmrc 配置",[75,263,267],{"className":264,"code":265,"language":266,"meta":80,"style":80},"language-ini shiki shiki-themes github-light github-dark","# .npmrc\nshamefully-hoist=true          # 提升依赖（某些包需要）\nstrict-peer-dependencies=false\nauto-install-peers=true\n","ini",[26,268,269,274,285,293],{"__ignoreMap":80},[84,270,271],{"class":86,"line":87},[84,272,273],{"class":90},"# .npmrc\n",[84,275,276,279,282],{"class":86,"line":94},[84,277,278],{"class":125},"shamefully-hoist",[84,280,281],{"class":97},"=true          ",[84,283,284],{"class":90},"# 提升依赖（某些包需要）\n",[84,286,287,290],{"class":86,"line":101},[84,288,289],{"class":125},"strict-peer-dependencies",[84,291,292],{"class":97},"=false\n",[84,294,295,298],{"class":86,"line":107},[84,296,297],{"class":125},"auto-install-peers",[84,299,300],{"class":97},"=true\n",[31,302,304],{"id":303},"monorepopnpm-workspace","Monorepo（pnpm workspace）",[71,306,307],{"id":307},"目录结构",[75,309,314],{"className":310,"code":312,"language":313},[311],"language-text","my-monorepo\u002F\n├── package.json\n├── pnpm-workspace.yaml\n├── packages\u002F\n│   ├── shared\u002F\n│   │   └── package.json\n│   ├── web\u002F\n│   │   └── package.json\n│   └── api\u002F\n│       └── package.json\n└── apps\u002F\n    └── admin\u002F\n        └── package.json\n","text",[26,315,312],{"__ignoreMap":80},[71,317,319],{"id":318},"pnpm-workspaceyaml","pnpm-workspace.yaml",[75,321,325],{"className":322,"code":323,"language":324,"meta":80,"style":80},"language-yaml shiki shiki-themes github-light github-dark","packages:\n  - \"packages\u002F*\"\n  - \"apps\u002F*\"\n","yaml",[26,326,327,336,344],{"__ignoreMap":80},[84,328,329,333],{"class":86,"line":87},[84,330,332],{"class":331},"s9eBZ","packages",[84,334,335],{"class":97},":\n",[84,337,338,341],{"class":86,"line":94},[84,339,340],{"class":97},"  - ",[84,342,343],{"class":147},"\"packages\u002F*\"\n",[84,345,346,348],{"class":86,"line":101},[84,347,340],{"class":97},[84,349,350],{"class":147},"\"apps\u002F*\"\n",[31,352,353],{"id":353},"推荐组织方式",[22,355,356],{},"一个比较常见、也比较好理解的约定是：",[39,358,359,365,371],{},[42,360,361,364],{},[26,362,363],{},"apps\u002F"," 放可独立运行的应用",[42,366,367,370],{},[26,368,369],{},"packages\u002F"," 放共享组件、工具、类型、配置",[42,372,373],{},"根目录只放工作区级脚本和统一配置",[22,375,376],{},"这样做的好处是：开发者一眼就能分辨“这是产品应用”还是“这是被复用的基础包”。",[71,378,379],{"id":379},"工作区间依赖",[75,381,383],{"className":135,"code":382,"language":137,"meta":80,"style":80},"# 在 web 包中添加 shared 作为依赖\npnpm add @myorg\u002Fshared --filter web\n\n# 或在 package.json 中\n{\n  \"dependencies\": {\n    \"@myorg\u002Fshared\": \"workspace:*\"\n  }\n}\n",[26,384,385,390,405,411,416,421,432,442,447],{"__ignoreMap":80},[84,386,387],{"class":86,"line":87},[84,388,389],{"class":90},"# 在 web 包中添加 shared 作为依赖\n",[84,391,392,394,396,399,402],{"class":86,"line":94},[84,393,28],{"class":144},[84,395,148],{"class":147},[84,397,398],{"class":147}," @myorg\u002Fshared",[84,400,401],{"class":163}," --filter",[84,403,404],{"class":147}," web\n",[84,406,407],{"class":86,"line":101},[84,408,410],{"emptyLinePlaceholder":409},true,"\n",[84,412,413],{"class":86,"line":107},[84,414,415],{"class":90},"# 或在 package.json 中\n",[84,417,418],{"class":86,"line":113},[84,419,420],{"class":97},"{\n",[84,422,423,426,429],{"class":86,"line":119},[84,424,425],{"class":144},"  \"dependencies\"",[84,427,428],{"class":163},":",[84,430,431],{"class":147}," {\n",[84,433,434,437,439],{"class":86,"line":220},[84,435,436],{"class":144},"    \"@myorg\u002Fshared\"",[84,438,428],{"class":163},[84,440,441],{"class":147}," \"workspace:*\"\n",[84,443,444],{"class":86,"line":233},[84,445,446],{"class":97},"  }\n",[84,448,449],{"class":86,"line":247},[84,450,451],{"class":97},"}\n",[71,453,454],{"id":454},"过滤命令",[75,456,458],{"className":135,"code":457,"language":137,"meta":80,"style":80},"pnpm --filter web dev          # 只在 web 包运行\npnpm --filter web... build     # web 及其依赖\npnpm --filter .\u002Fpackages\u002F* test # 所有 packages 下的包\npnpm -r build                  # 所有包递归执行\n",[26,459,460,475,490,508],{"__ignoreMap":80},[84,461,462,464,466,469,472],{"class":86,"line":87},[84,463,28],{"class":144},[84,465,401],{"class":163},[84,467,468],{"class":147}," web",[84,470,471],{"class":147}," dev",[84,473,474],{"class":90},"          # 只在 web 包运行\n",[84,476,477,479,481,484,487],{"class":86,"line":94},[84,478,28],{"class":144},[84,480,401],{"class":163},[84,482,483],{"class":147}," web...",[84,485,486],{"class":147}," build",[84,488,489],{"class":90},"     # web 及其依赖\n",[84,491,492,494,496,499,502,505],{"class":86,"line":101},[84,493,28],{"class":144},[84,495,401],{"class":163},[84,497,498],{"class":147}," .\u002Fpackages\u002F",[84,500,501],{"class":163},"*",[84,503,504],{"class":147}," test",[84,506,507],{"class":90}," # 所有 packages 下的包\n",[84,509,510,512,515,517],{"class":86,"line":107},[84,511,28],{"class":144},[84,513,514],{"class":163}," -r",[84,516,486],{"class":147},[84,518,519],{"class":90},"                  # 所有包递归执行\n",[22,521,522],{},"过滤命令是 Monorepo 日常效率的关键，尤其适合：",[39,524,525,528,531],{},[42,526,527],{},"只重建当前改动应用",[42,529,530],{},"只测试共享包",[42,532,533],{},"CI 中按受影响范围减少无意义执行",[31,535,537],{"id":536},"turborepo","Turborepo",[22,539,540,544],{},[64,541,537],{"href":542,"rel":543},"https:\u002F\u002Fturbo.build\u002F",[68]," 为 Monorepo 提供增量构建和缓存。",[75,546,548],{"className":135,"code":547,"language":137,"meta":80,"style":80},"pnpm add -Dw turbo\n",[26,549,550],{"__ignoreMap":80},[84,551,552,554,556,559],{"class":86,"line":87},[84,553,28],{"class":144},[84,555,148],{"class":147},[84,557,558],{"class":163}," -Dw",[84,560,561],{"class":147}," turbo\n",[75,563,567],{"className":564,"code":565,"language":566,"meta":80,"style":80},"language-jsonc shiki shiki-themes github-light github-dark","\u002F\u002F turbo.json\n{\n  \"$schema\": \"https:\u002F\u002Fturbo.build\u002Fschema.json\",\n  \"tasks\": {\n    \"build\": {\n      \"dependsOn\": [\"^build\"],\n      \"outputs\": [\"dist\u002F**\", \".next\u002F**\"],\n    },\n    \"dev\": {\n      \"cache\": false,\n      \"persistent\": true,\n    },\n    \"test\": {\n      \"dependsOn\": [\"build\"],\n    },\n    \"lint\": {},\n  },\n}\n","jsonc",[26,568,569,574,578,592,600,607,621,639,644,651,664,677,682,690,702,707,716,722],{"__ignoreMap":80},[84,570,571],{"class":86,"line":87},[84,572,573],{"class":90},"\u002F\u002F turbo.json\n",[84,575,576],{"class":86,"line":94},[84,577,420],{"class":97},[84,579,580,583,586,589],{"class":86,"line":101},[84,581,582],{"class":163},"  \"$schema\"",[84,584,585],{"class":97},": ",[84,587,588],{"class":147},"\"https:\u002F\u002Fturbo.build\u002Fschema.json\"",[84,590,591],{"class":97},",\n",[84,593,594,597],{"class":86,"line":107},[84,595,596],{"class":163},"  \"tasks\"",[84,598,599],{"class":97},": {\n",[84,601,602,605],{"class":86,"line":113},[84,603,604],{"class":163},"    \"build\"",[84,606,599],{"class":97},[84,608,609,612,615,618],{"class":86,"line":119},[84,610,611],{"class":163},"      \"dependsOn\"",[84,613,614],{"class":97},": [",[84,616,617],{"class":147},"\"^build\"",[84,619,620],{"class":97},"],\n",[84,622,623,626,628,631,634,637],{"class":86,"line":220},[84,624,625],{"class":163},"      \"outputs\"",[84,627,614],{"class":97},[84,629,630],{"class":147},"\"dist\u002F**\"",[84,632,633],{"class":97},", ",[84,635,636],{"class":147},"\".next\u002F**\"",[84,638,620],{"class":97},[84,640,641],{"class":86,"line":233},[84,642,643],{"class":97},"    },\n",[84,645,646,649],{"class":86,"line":247},[84,647,648],{"class":163},"    \"dev\"",[84,650,599],{"class":97},[84,652,654,657,659,662],{"class":86,"line":653},10,[84,655,656],{"class":163},"      \"cache\"",[84,658,585],{"class":97},[84,660,661],{"class":163},"false",[84,663,591],{"class":97},[84,665,667,670,672,675],{"class":86,"line":666},11,[84,668,669],{"class":163},"      \"persistent\"",[84,671,585],{"class":97},[84,673,674],{"class":163},"true",[84,676,591],{"class":97},[84,678,680],{"class":86,"line":679},12,[84,681,643],{"class":97},[84,683,685,688],{"class":86,"line":684},13,[84,686,687],{"class":163},"    \"test\"",[84,689,599],{"class":97},[84,691,693,695,697,700],{"class":86,"line":692},14,[84,694,611],{"class":163},[84,696,614],{"class":97},[84,698,699],{"class":147},"\"build\"",[84,701,620],{"class":97},[84,703,705],{"class":86,"line":704},15,[84,706,643],{"class":97},[84,708,710,713],{"class":86,"line":709},16,[84,711,712],{"class":163},"    \"lint\"",[84,714,715],{"class":97},": {},\n",[84,717,719],{"class":86,"line":718},17,[84,720,721],{"class":97},"  },\n",[84,723,725],{"class":86,"line":724},18,[84,726,451],{"class":97},[75,728,730],{"className":135,"code":729,"language":137,"meta":80,"style":80},"turbo build                    # 构建所有包（带缓存）\nturbo dev --filter web         # 开发指定包\nturbo test --affected          # 只测试受影响的包\n",[26,731,732,742,755],{"__ignoreMap":80},[84,733,734,737,739],{"class":86,"line":87},[84,735,736],{"class":144},"turbo",[84,738,486],{"class":147},[84,740,741],{"class":90},"                    # 构建所有包（带缓存）\n",[84,743,744,746,748,750,752],{"class":86,"line":94},[84,745,736],{"class":144},[84,747,471],{"class":147},[84,749,401],{"class":163},[84,751,468],{"class":147},[84,753,754],{"class":90},"         # 开发指定包\n",[84,756,757,759,761,764],{"class":86,"line":101},[84,758,736],{"class":144},[84,760,504],{"class":147},[84,762,763],{"class":163}," --affected",[84,765,766],{"class":90},"          # 只测试受影响的包\n",[31,768,769],{"id":769},"常见问题",[71,771,773],{"id":772},"依赖装得上但运行时报错","依赖装得上，但运行时报错",[22,775,776],{},"Monorepo 下最常见的问题之一是包边界不清晰。要先确认：",[39,778,779,782,792],{},[42,780,781],{},"依赖是不是加到了正确的包里",[42,783,784,785,788,789],{},"共享包是不是正确声明了 ",[26,786,787],{},"dependencies"," \u002F ",[26,790,791],{},"peerDependencies",[42,793,794],{},"是否误依赖了某个包被 hoist 后“碰巧可用”的内容",[71,796,797],{"id":797},"工作区引用版本混乱",[22,799,800],{},"内部包建议优先使用：",[75,802,806],{"className":803,"code":804,"language":805,"meta":80,"style":80},"language-json shiki shiki-themes github-light github-dark","{\n  \"dependencies\": {\n    \"@myorg\u002Fshared\": \"workspace:*\"\n  }\n}\n","json",[26,807,808,812,818,827,831],{"__ignoreMap":80},[84,809,810],{"class":86,"line":87},[84,811,420],{"class":97},[84,813,814,816],{"class":86,"line":94},[84,815,425],{"class":163},[84,817,599],{"class":97},[84,819,820,822,824],{"class":86,"line":101},[84,821,436],{"class":163},[84,823,585],{"class":97},[84,825,826],{"class":147},"\"workspace:*\"\n",[84,828,829],{"class":86,"line":107},[84,830,446],{"class":97},[84,832,833],{"class":86,"line":113},[84,834,451],{"class":97},[22,836,837],{},"这样更明确，也更适合统一发布与升级。",[71,839,841],{"id":840},"ci-很慢","CI 很慢",[22,843,844],{},"Monorepo 不代表必须全量跑。更推荐：",[39,846,847,853,856],{},[42,848,849,850],{},"利用 ",[26,851,852],{},"pnpm --filter",[42,854,855],{},"使用 Turborepo 缓存",[42,857,858],{},"让 lint \u002F test \u002F build 按影响范围执行",[31,860,861],{"id":861},"延伸阅读",[39,863,864,870,876],{},[42,865,866],{},[64,867,869],{"href":868},"\u002Fdocs\u002Fnodejs-ecosystem","Node.js 生态与包管理",[42,871,872],{},[64,873,875],{"href":874},"\u002Fdocs\u002Fgithub-actions","GitHub Actions 入门",[42,877,878],{},[64,879,881],{"href":880},"\u002Fdocs\u002Flocal-setup","本地开发环境搭建",[31,883,884],{"id":884},"参考链接",[39,886,887,894,900],{},[42,888,889,893],{},[64,890,28],{"href":891,"rel":892},"https:\u002F\u002Fpnpm.io\u002Fzh\u002F",[68]," — 官方中文文档",[42,895,896,899],{},[64,897,537],{"href":542,"rel":898},[68]," — 构建系统",[42,901,902,907],{},[64,903,906],{"href":904,"rel":905},"https:\u002F\u002Fmonorepo.tools\u002F",[68],"Monorepo Tools"," — 工具对比",[909,910,911],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}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 .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":80,"searchDepth":94,"depth":94,"links":913},[914,915,920,924,928,929,934,935],{"id":33,"depth":94,"text":34},{"id":59,"depth":94,"text":60,"children":916},[917,918,919],{"id":73,"depth":101,"text":73},{"id":132,"depth":101,"text":132},{"id":260,"depth":101,"text":261},{"id":303,"depth":94,"text":304,"children":921},[922,923],{"id":307,"depth":101,"text":307},{"id":318,"depth":101,"text":319},{"id":353,"depth":94,"text":353,"children":925},[926,927],{"id":379,"depth":101,"text":379},{"id":454,"depth":101,"text":454},{"id":536,"depth":94,"text":537},{"id":769,"depth":94,"text":769,"children":930},[931,932,933],{"id":772,"depth":101,"text":773},{"id":797,"depth":101,"text":797},{"id":840,"depth":101,"text":841},{"id":861,"depth":94,"text":861},{"id":884,"depth":94,"text":884},{"path":937,"title":938,"description":939,"docType":8,"resourceKind":9,"categoryId":940,"categoryLabel":941,"updatedAt":12,"publishedAt":12,"icon":942},"\u002Fdocs\u002Fopenclaw","OpenClaw - 个人 AI 助手网关","自托管的 AI 助手，连接 WhatsApp、Telegram、Discord 等平台，支持浏览器控制和语音交互","ai-tools","AI 工具","i-carbon-chat-bot",{"path":944,"title":945,"description":946,"docType":8,"resourceKind":9,"categoryId":947,"categoryLabel":948,"updatedAt":12,"publishedAt":12,"icon":949},"\u002Fdocs\u002Fpt-trackers","PT 站点与资源","私有 BT 追踪器站点汇总、公开索引与使用指南","entertainment-resources","娱乐与资源","i-carbon-game-console",[951,952,953],"希望把零散经验整理成长期可复用工作流的人","正在搭建开发环境、统一工具链或排查构建问题的开发者","希望阅读时顺手建立自己的操作清单或收藏体系的人",[955,956,957],"先浏览标题、摘要和目录，带着问题阅读会更高效","确认本机 Node、包管理器、终端和仓库依赖版本是否一致","如果页面里提到相关文档，尽量一起打开对照，效果通常更完整",[959,963,968,973],{"path":880,"title":960,"description":961,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":962,"publishedAt":962,"icon":13},"本地运行与部署","使用 bun 安装、开发、构建与预览 DomiVault 的完整本地流程与排障指引","2026-03-10",{"path":964,"title":965,"description":966,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":967,"publishedAt":967,"icon":13},"\u002Fdocs\u002Fvolta-guide","Volta Node 版本管理","使用 Volta 管理 Node.js、npm、pnpm 和 Yarn，并在项目中固定 JavaScript 工具链版本","2026-03-08",{"path":969,"title":970,"description":971,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":972,"publishedAt":972,"icon":13},"\u002Fdocs\u002Fenv-variables","环境变量管理","dotenv 配置、各平台环境变量设置、.env 文件规范与安全实践","2026-02-27",{"path":974,"title":975,"description":976,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":972,"publishedAt":972,"icon":13},"\u002Fdocs\u002Fapi-testing","API 测试与调试","curl、HTTPie、Postman、Bruno 等 API 测试工具与常用技巧",1776215713926]