[{"data":1,"prerenderedAt":365},["ShallowReactive",2],{"article-\u002Farticles\u002Fdeploy-cloudflare-workers":3},{"id":4,"title":5,"body":6,"date":352,"description":353,"extension":354,"meta":355,"navigation":356,"path":357,"published":356,"seo":358,"stem":359,"tags":360,"__hash__":364},"articles\u002Farticles\u002Fdeploy-cloudflare-workers.md","把 Nuxt 站点部署到 Cloudflare Workers",{"type":7,"value":8,"toc":346},"minimark",[9,13,17,25,191,195,219,230,246,253,271,274,281,295,298,301,336,342],[10,11,12],"p",{},"Cloudflare Workers 上可以运行 Node.js 兼容的完整 Nuxt 服务端渲染应用，而且全球边缘节点访问都很快。由于 Nuxt Content v3 使用 SQLite 存储文章索引，部署到 Cloudflare 时需要配一个 D1 数据库。",[14,15,16],"h2",{"id":16},"项目里已经做了什么",[10,18,19,20,24],{},"项目已经把 Nitro 预设配置为 Cloudflare Worker，Wrangler 配置会在构建时自动生成，无需手写 ",[21,22,23],"code",{},"wrangler.jsonc","：",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-ts shiki shiki-themes github-light github-dark","\u002F\u002F nuxt.config.ts\nnitro: {\n  preset: 'cloudflare_module',\n  cloudflare: {\n    deployConfig: true,\n    wrangler: {\n      name: 'huozhe-me',\n      d1_databases: [\n        {\n          binding: 'DB',\n          database_name: 'huozhe-me-content',\n          database_id: '替换为真实 ID',\n        },\n      ],\n    },\n  },\n}\n","ts","",[21,33,34,43,54,70,78,92,100,113,122,128,139,150,161,167,173,179,185],{"__ignoreMap":31},[35,36,39],"span",{"class":37,"line":38},"line",1,[35,40,42],{"class":41},"sJ8bj","\u002F\u002F nuxt.config.ts\n",[35,44,46,50],{"class":37,"line":45},2,[35,47,49],{"class":48},"sScJk","nitro",[35,51,53],{"class":52},"sVt8B",": {\n",[35,55,57,60,63,67],{"class":37,"line":56},3,[35,58,59],{"class":48},"  preset",[35,61,62],{"class":52},": ",[35,64,66],{"class":65},"sZZnC","'cloudflare_module'",[35,68,69],{"class":52},",\n",[35,71,73,76],{"class":37,"line":72},4,[35,74,75],{"class":48},"  cloudflare",[35,77,53],{"class":52},[35,79,81,84,86,90],{"class":37,"line":80},5,[35,82,83],{"class":48},"    deployConfig",[35,85,62],{"class":52},[35,87,89],{"class":88},"sj4cs","true",[35,91,69],{"class":52},[35,93,95,98],{"class":37,"line":94},6,[35,96,97],{"class":48},"    wrangler",[35,99,53],{"class":52},[35,101,103,106,108,111],{"class":37,"line":102},7,[35,104,105],{"class":48},"      name",[35,107,62],{"class":52},[35,109,110],{"class":65},"'huozhe-me'",[35,112,69],{"class":52},[35,114,116,119],{"class":37,"line":115},8,[35,117,118],{"class":48},"      d1_databases",[35,120,121],{"class":52},": [\n",[35,123,125],{"class":37,"line":124},9,[35,126,127],{"class":52},"        {\n",[35,129,131,134,137],{"class":37,"line":130},10,[35,132,133],{"class":52},"          binding: ",[35,135,136],{"class":65},"'DB'",[35,138,69],{"class":52},[35,140,142,145,148],{"class":37,"line":141},11,[35,143,144],{"class":52},"          database_name: ",[35,146,147],{"class":65},"'huozhe-me-content'",[35,149,69],{"class":52},[35,151,153,156,159],{"class":37,"line":152},12,[35,154,155],{"class":52},"          database_id: ",[35,157,158],{"class":65},"'替换为真实 ID'",[35,160,69],{"class":52},[35,162,164],{"class":37,"line":163},13,[35,165,166],{"class":52},"        },\n",[35,168,170],{"class":37,"line":169},14,[35,171,172],{"class":52},"      ],\n",[35,174,176],{"class":37,"line":175},15,[35,177,178],{"class":52},"    },\n",[35,180,182],{"class":37,"line":181},16,[35,183,184],{"class":52},"  },\n",[35,186,188],{"class":37,"line":187},17,[35,189,190],{"class":52},"}\n",[14,192,194],{"id":193},"创建-d1-数据库","创建 D1 数据库",[26,196,200],{"className":197,"code":198,"language":199,"meta":31,"style":31},"language-bash shiki shiki-themes github-light github-dark","npx wrangler d1 create huozhe-me-content\n","bash",[21,201,202],{"__ignoreMap":31},[35,203,204,207,210,213,216],{"class":37,"line":38},[35,205,206],{"class":48},"npx",[35,208,209],{"class":65}," wrangler",[35,211,212],{"class":65}," d1",[35,214,215],{"class":65}," create",[35,217,218],{"class":65}," huozhe-me-content\n",[10,220,221,222,225,226,229],{},"把输出的 ",[21,223,224],{},"database_id"," 填回 ",[21,227,228],{},"nuxt.config.ts","，然后执行：",[26,231,233],{"className":197,"code":232,"language":199,"meta":31,"style":31},"npm run deploy\n",[21,234,235],{"__ignoreMap":31},[35,236,237,240,243],{"class":37,"line":38},[35,238,239],{"class":48},"npm",[35,241,242],{"class":65}," run",[35,244,245],{"class":65}," deploy\n",[10,247,248,249,252],{},"这条命令会先构建 Nuxt（生成 ",[21,250,251],{},".output\u002Fserver\u002Findex.mjs"," 与 SQL 内容 dump），再用 Wrangler 部署到 Cloudflare。",[10,254,255,256,24,259,262,263,266,267,270],{},"构建产物位于 ",[21,257,258],{},".output\u002F",[21,260,261],{},"server\u002Findex.mjs"," 是 Worker 入口，",[21,264,265],{},"public\u002F"," 是静态资源，",[21,268,269],{},".output\u002Fserver\u002Fwrangler.json"," 是自动生成的部署配置。",[14,272,273],{"id":273},"本地开发不受影响",[10,275,276,277,280],{},"开发模式走本地 SQLite（",[21,278,279],{},"better-sqlite3","），只有生产构建与部署才会切到 D1：",[26,282,284],{"className":197,"code":283,"language":199,"meta":31,"style":31},"npm run dev\n",[21,285,286],{"__ignoreMap":31},[35,287,288,290,292],{"class":37,"line":38},[35,289,239],{"class":48},[35,291,242],{"class":65},[35,293,294],{"class":65}," dev\n",[14,296,297],{"id":297},"绑定自定义域名",[10,299,300],{},"部署成功后，在 Cloudflare Dashboard 中打开 Worker 页面：",[302,303,304,312,322,329],"ol",{},[305,306,307,308],"li",{},"进入 Worker 的 ",[309,310,311],"strong",{},"Settings → Domains & Routes",[305,313,314,315,318,319],{},"点击 ",[309,316,317],{},"Add","，选择 ",[309,320,321],{},"Custom Domain",[305,323,324,325,328],{},"输入 ",[21,326,327],{},"huozhe.me","，按提示验证并保存",[305,330,331,332,335],{},"再添加一条 ",[21,333,334],{},"www.huozhe.me"," 指向同一个 Worker（可选）",[10,337,338,339,341],{},"前提是 ",[21,340,327],{}," 这个域名已经由 Cloudflare 托管（DNS 生效中）。",[343,344,345],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .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);}",{"title":31,"searchDepth":45,"depth":45,"links":347},[348,349,350,351],{"id":16,"depth":45,"text":16},{"id":193,"depth":45,"text":194},{"id":273,"depth":45,"text":273},{"id":297,"depth":45,"text":297},"2026-09-09","从 build 到绑定 huozhe.me 自定义域名的完整步骤。","md",{},true,"\u002Farticles\u002Fdeploy-cloudflare-workers",{"title":5,"description":353},"articles\u002Fdeploy-cloudflare-workers",[361,362,363],"Cloudflare","Nuxt","部署","Xq2iZLY76n1uN7mRolnT7tz1e9sH_UzLLg4veGsFzTw",1788926776503]