[{"data":1,"prerenderedAt":176},["ShallowReactive",2],{"content:\u002F2026\u002Fdual-comment-system":3,"surround:\u002F2026\u002Fdual-comment-system":170},{"id":4,"title":5,"body":6,"categories":142,"date":144,"description":145,"draft":146,"extension":147,"image":148,"meta":149,"navigation":153,"path":154,"permalink":155,"published":155,"readingTime":156,"recommend":155,"references":155,"seo":161,"sitemap":162,"stem":163,"tags":164,"type":168,"updated":144,"__hash__":169},"content\u002Fposts\u002F2026\u002Fdual-comment-system.md","站点双评论系统简记",{"type":7,"value":8,"toc":135},"minimark",[9,13,17,20,32,58,61,71,78,81,88,95,98,129,132],[10,11,12],"p",{},"本站评论区最早只挂了一个 Twikoo，自建自维护，数据放 MongoDB 里。Twikoo也是一坨，于是有双评论系统——Twikoo 和 giscus 的想法，写篇小文记下。",[14,15,16],"h2",{"id":16},"为什么上双系统",[10,18,19],{},"最初选 Twikoo 纯粹是主题自带，开箱即用、有管理面板、还能匿名评论。勉强还行，很久之前用过Giscus，印象深刻：",[21,22,29],"pre",{"className":23,"code":25,"filename":26,"language":27,"meta":28},[24],"language-ts","export default {\n  twikoo: {\n    envId: 'https:\u002F\u002Fxxx.xxxxx.xxx\u002F',\n  },\n}\n","blog.config.ts","ts","",[30,31,25],"code",{"__ignoreMap":28},[33,34,35],"card-list",{},[36,37,38,46,52],"ul",{},[39,40,41,45],"li",{},[42,43,44],"strong",{},"默认 Twikoo","：匿名就能评，管理面板也顺，照顾不想登录的访客",[39,47,48,51],{},[42,49,50],{},"可切到 giscus","：基于 GitHub Discussions，GitHub 账号直接评、能收回复通知，开发者用着顺手",[39,53,54,57],{},[42,55,56],{},"互为兜底","：一个挂了，切到另一个评论区照样能用",[10,59,60],{},"相关链接：",[62,63],"link-card",{"className":64,"description":67,"icon":68,"link":69,"title":70},[65,66],"gradient-card","active","简洁的静态网站评论系统，自托管、数据存 MongoDB","https:\u002F\u002Ftwikoo.js.org\u002Ftwikoo-logo-mini.png","https:\u002F\u002Ftwikoo.js.org\u002F","Twikoo",[62,72],{"className":73,"description":74,"icon":75,"link":76,"title":77},[65,66],"基于 GitHub Discussions 的评论系统，评论存进仓库","https:\u002F\u002Fgiscus.app\u002Fapple-touch-icon.png","https:\u002F\u002Fgiscus.app\u002F","giscus",[14,79,80],{"id":80},"切换是怎么做的",[10,82,83,84,87],{},"核心是一组切换按钮，配合 ",[30,85,86],{"code":86},"useLocalStorage"," 记住选的是哪个：",[21,89,93],{"className":90,"code":91,"filename":92,"language":27,"meta":28},[24],"const switchItems = [\n  { value: 'twikoo', label: 'Twikoo', icon: 'tabler:message-dots' },\n  { value: 'giscus', label: 'Giscus', icon: 'simple-icons:github' },\n]\n","Comment.vue",[30,94,91],{"__ignoreMap":28},[10,96,97],{},"几个小细节，都是踩出来的：",[36,99,100,111,122],{},[39,101,102,103,106,107,110],{},"选择记忆放在 ",[30,104,105],{"code":105},"localStorage","，",[30,108,109],{"code":109},"initOnMounted: true"," 挂载之后再读，否则服务端和客户端首屏水合会对不上。",[39,112,113,114,117,118,121],{},"切换用 ",[30,115,116],{"code":116},"v-show"," 保活而不是 ",[30,119,120],{"code":120},"v-if"," 销毁重建——不然每切一次就重新拉一遍评论。",[39,123,124,125,128],{},"懒加载：",[30,126,127],{"code":127},"activate()"," 只在某个系统第一次亮相时才注入它的脚本，两个系统不会同时加载。",[14,130,131],{"id":131},"结语",[10,133,134],{},"完...",{"title":28,"searchDepth":136,"depth":136,"links":137},4,[138,140,141],{"id":16,"depth":139,"text":16},2,{"id":80,"depth":139,"text":80},{"id":131,"depth":139,"text":131},[143],"技术","2026-09-25 21:55:00","从单点 Twikoo 到 Twikoo + giscus 双评论系统",false,"md","https:\u002F\u002Fvercel-blob.api.kr033.top\u002Fapi\u002Fdownload\u002Fpost\u002Ftwikoo+giscus\u002F20260925\u002F1790346624916-1790346541029.jpg",{"aside":150,"slots":152},[151],"toc",{},true,"\u002F2026\u002Fdual-comment-system",null,{"text":157,"minutes":158,"time":159,"words":160},"2 min read",1.63,97800,326,{"title":5,"description":145},{"loc":154},"posts\u002F2026\u002Fdual-comment-system",[70,77,165,166,167],"评论系统","Nuxt","Vue","tech","AUlBcYcwFgaOOWCJYkzpqx5dz9LKguki0NRiB2ekEuU",[171,155],{"title":172,"path":173,"stem":174,"date":175,"type":168,"children":-1},"把 Vercel Blob 改造成 S3 兼容图床","\u002F2026\u002Fblob-s3-imgbed","posts\u002F2026\u002Fblob-s3-imgbed","2026-08-30 20:11:00",1790819296582]