[{"data":1,"prerenderedAt":490},["ShallowReactive",2],{"sidebar-page":3,"tag-技术架构":4},null,[5],{"id":6,"title":7,"author":8,"body":9,"cover":3,"date":478,"description":15,"extension":479,"meta":480,"navigation":481,"path":482,"seo":483,"stem":484,"tags":485,"__hash__":489},"content\u002Fsite-migration-compliance-2026-10-03.md","关于本站开展技术架构迁移的说明","AeYunDian",{"type":10,"value":11,"toc":470},"minimark",[12,16,21,29,45,52,59,62,66,72,86,105,108,149,152,155,157,168,170,173,183,218,225,232,246,249,256,289,292,299,323,330,334,340,346,352,358,364,368,371,374,380,383,387,390,393,396,401,435,440,466],[13,14,15],"p",{},"为进一步降低站点运行成本、提升内容可维护性、扩大浏览器兼容范围，本站于2026年9月至10月对底层技术架构进行系统性迁移。本次迁移不涉及内容层与视觉层的整体改版，但涉及渲染方式、组件体系、样式组织、URL 规范、构建流程等基础机制的全面调整。现将迁移背景、主要内容及后续安排说明如下。",[17,18,20],"h2",{"id":19},"一迁移背景","一、迁移背景",[13,22,23,24,28],{},"（一）",[25,26,27],"strong",{},"原架构的局限","。本站原采用 Vue 3 单页应用方案，构建产物依赖客户端 JavaScript 渲染。该方案在交互密集的应用中具有优势，但对以内容发布为主要目的的站点而言存在以下局限：",[30,31,32,36,39,42],"ul",{},[33,34,35],"li",{},"首屏渲染依赖脚本执行，禁用脚本的浏览器无法获取内容；",[33,37,38],{},"对早期浏览器（如 Internet Explorer 系列）兼容成本极高；",[33,40,41],{},"内容以组件形式组织，写作需要掌握 Vue 模板语法，创作门槛较高；",[33,43,44],{},"每次内容更新均需重新打包全量资源，发布流程偏重。",[13,46,47,48,51],{},"（二）",[25,49,50],{},"本站定位的变化","。随着本站内容以\"备忘录\"\"规范说明\"\"公告\"等长文为主，交互需求趋弱，静态内容发布需求趋强。原架构与站点定位之间的适配度下降。",[13,53,54,55,58],{},"（三）",[25,56,57],{},"兼容性要求","。本站明确将浏览器兼容范围扩展至 Internet Explorer 7 及以上的所有浏览器，原架构基于现代 JavaScript 特性，无法覆盖该范围。",[13,60,61],{},"基于以上三点，本站决定对技术架构进行调整。",[17,63,65],{"id":64},"二迁移主要内容","二、迁移主要内容",[13,67,23,68,71],{},[25,69,70],{},"构建体系迁移","。由 Vue 3 + Vite 方案调整为 Eleventy 3 + Nunjucks 方案。Eleventy 为静态站点生成器，在构建阶段完成全部页面渲染，输出纯 HTML、CSS 与少量辅助脚本。迁移后：",[30,73,74,77,80,83],{},[33,75,76],{},"所有页面均为预渲染的静态 HTML；",[33,78,79],{},"站点可部署于任意静态托管服务；",[33,81,82],{},"构建产物不含应用级 JavaScript 框架代码；",[33,84,85],{},"内容更新仅重新生成对应页面。",[13,87,47,88,91,92,96,97,100,101,104],{},[25,89,90],{},"组件体系迁移","。由 Vue 单文件组件调整为 Nunjucks macro。原 ",[93,94,95],"code",{},".vue"," 文件中以 ",[93,98,99],{},"props"," 传参、以 ",[93,102,103],{},"slot"," 分发内容的方式，统一改为 Nunjucks 的宏调用，参数以字典形式传入。以按钮组件为例，原写法为：",[13,106,107],{},"{% raw %}",[109,110,115],"pre",{"className":111,"code":112,"language":113,"meta":114,"style":114},"language-vue shiki shiki-themes monokai","\u003CGovButton variant=\"primary\">提交\u003C\u002FGovButton>\n","vue","",[93,116,117],{"__ignoreMap":114},[118,119,122,126,130,134,137,141,144,146],"span",{"class":120,"line":121},"line",1,[118,123,125],{"class":124},"sCdxs","\u003C",[118,127,129],{"class":128},"s8I7P","GovButton",[118,131,133],{"class":132},"sHkqI"," variant",[118,135,136],{"class":124},"=",[118,138,140],{"class":139},"s_Ekj","\"primary\"",[118,142,143],{"class":124},">提交\u003C\u002F",[118,145,129],{"class":128},[118,147,148],{"class":124},">\n",[13,150,151],{},"{% endraw %}",[13,153,154],{},"迁移后写法为：",[13,156,107],{},[109,158,162],{"className":159,"code":160,"language":161,"meta":114,"style":114},"language-njk shiki shiki-themes monokai","{{ button({ text: \"提交\", type: \"primary\" }) }}\n","njk",[93,163,164],{"__ignoreMap":114},[118,165,166],{"class":120,"line":121},[118,167,160],{},[13,169,151],{},[13,171,172],{},"两种方式在职责上等价：均实现\"一处定义、多处引用\"。差异在于前者运行于客户端，后者运行于构建时。",[13,174,54,175,178,179,182],{},[25,176,177],{},"样式体系重组","。原样式以 Vue 单文件组件内的 ",[93,180,181],{},"\u003Cstyle scoped>"," 形式就近维护，存在重复定义、难以全局复用的问题。本次调整将样式按用途分为三类：",[30,184,185,191,205],{},[33,186,187,190],{},[25,188,189],{},"基础样式","：重置、变量、布局，全站始终加载；",[33,192,193,196,197,200,201,204],{},[25,194,195],{},"组件样式","：按组件粒度拆分独立文件，如 ",[93,198,199],{},"button.css","、",[93,202,203],{},"tag.css","；",[33,206,207,210,211,200,214,217],{},[25,208,209],{},"页面样式","：按页面粒度独立维护，如 ",[93,212,213],{},"post.css",[93,215,216],{},"archive.css","。",[13,219,220,221,224],{},"每个页面在 frontmatter 中声明所需样式文件，构建时按需拼装 ",[93,222,223],{},"\u003Clink>"," 标签，避免全站加载无关样式。",[13,226,227,228,231],{},"（四）",[25,229,230],{},"URL 规范调整","。原标签页 URL 使用原始中文字符，存在编码歧义、跨平台兼容性差的问题。本次调整引入拼音转换规则，将中文标签统一转换为带声调数字的拼音形式，例如：",[30,233,234,240],{},[33,235,236,237],{},"原 URL：",[93,238,239],{},"\u002Ftags\u002F文章\u002F",[33,241,242,243],{},"新 URL：",[93,244,245],{},"\u002Ftags\u002Fwen2-zhang1\u002F",[13,247,248],{},"针对拼音重名（如\"文章\"与\"纹章\"拼音相同）的情况，采用构建时预计算映射表的方式，按标签字典序为冲突项添加数字后缀，确保每条 URL 唯一。",[13,250,251,252,255],{},"（五）",[25,253,254],{},"浏览器兼容扩展","。本次迁移明确将兼容范围扩展至 Internet Explorer 7 及以上版本。主要策略包括：",[30,257,258,261,264,271,286],{},[33,259,260],{},"输出产物不含 ES6+ 语法，脚本以 ES5 形式书写；",[33,262,263],{},"使用 jQuery 1.12.4 作为 DOM 操作与 AJAX 的兼容层；",[33,265,266,267,270],{},"补充 ",[93,268,269],{},"ie7.css"," 专用补丁样式，通过条件注释仅向 IE7 及以下加载；",[33,272,273,274,277,278,281,282,285],{},"布局以 ",[93,275,276],{},"float"," + ",[93,279,280],{},"inline-block"," 为基准，",[93,283,284],{},"flex"," 仅作现代浏览器增强；",[33,287,288],{},"不使用 CSS 变量作为唯一值来源，均带 fallback。",[13,290,291],{},"需要说明的是，IE7 用户仅能获得静态内容阅读能力，动态功能（如评论、检索、发布后台）不在此兼容范围内。",[13,293,294,295,298],{},"（六）",[25,296,297],{},"工程化完善","。新增构建前清理步骤，每次构建均先删除旧产物目录，避免历史文件残留。同时补充：",[30,300,301,308,314,320],{},[33,302,303,304,307],{},"站点地图（",[93,305,306],{},"sitemap.xml","）；",[33,309,310,311,307],{},"内容订阅（",[93,312,313],{},"feed.xml",[33,315,316,317,307],{},"搜索引擎规则（",[93,318,319],{},"robots.txt",[33,321,322],{},"自定义 404 页面。",[13,324,325,326,329],{},"（七）",[25,327,328],{},"内容创作方式调整","。文章由 Vue 组件形式调整为标准 Markdown 文件，正文中可直接引用 Nunjucks 宏、读取站点全局数据，无需编写脚本逻辑。组件调用与 Markdown 语法可混用，写作门槛降低。",[17,331,333],{"id":332},"三迁移后效果","三、迁移后效果",[13,335,23,336,339],{},[25,337,338],{},"内容为先","。页面以纯 HTML 交付，禁用脚本的浏览器、早期浏览器、文本浏览器均可正常阅读。",[13,341,47,342,345],{},[25,343,344],{},"构建轻量","。站点不再包含应用级 JavaScript 框架，构建产物体积显著下降，构建时间缩短。",[13,347,54,348,351],{},[25,349,350],{},"样式可控","。样式按页面按需加载，避免了全站样式的冗余加载，也便于后续按组件粒度调整。",[13,353,227,354,357],{},[25,355,356],{},"URL 稳定","。标签、归档、文章等各类页面 URL 规范统一，便于分享、收藏与搜索引擎收录。",[13,359,251,360,363],{},[25,361,362],{},"维护便利","。新增文章仅需添加 Markdown 文件，无需改动路由、组件或构建脚本。",[17,365,367],{"id":366},"四后续工作","四、后续工作",[13,369,370],{},"（一）逐步将原站其他栏目内容迁移至新架构，保持 URL 结构一致性。",[13,372,373],{},"（二）针对现代浏览器补充增强功能，例如评论、检索、阅读进度指示等，以渐进增强方式提供，不影响基础阅读。",[13,375,376,377,379],{},"（三）持续监测 IE7 等早期浏览器下的可读性，发现问题及时在 ",[93,378,269],{}," 中补充补丁。",[13,381,382],{},"（四）完善发布流程，探索基于 Cloudflare Workers 与 GitHub API 的在线发布方案，降低内容维护的技术门槛。",[17,384,386],{"id":385},"五说明","五、说明",[13,388,389],{},"本站为个人技术项目，本次迁移属技术架构调整，不涉及任何机构或组织的立场表达。视觉设计仍参照政府网站规范进行，旨在为用户提供规范、清晰、易读的信息服务。所有内容仅代表个人观点，与任何机构无关。",[13,391,392],{},"特此说明。",[394,395],"hr",{},[13,397,398],{},[25,399,400],{},"附：主要参考文件",[30,402,403,404,403,414,403,421,403,428],{},"\n  ",[33,405,406],{},[407,408,413],"a",{"href":409,"target":410,"rel":411},"https:\u002F\u002Fwww.11ty.dev\u002Fdocs\u002F","_blank",[412],"noopener","Eleventy 官方文档",[33,415,416],{},[407,417,420],{"href":418,"target":410,"rel":419},"https:\u002F\u002Fmozilla.github.io\u002Fnunjucks\u002F",[412],"Nunjucks 模板引擎文档",[33,422,423],{},[407,424,427],{"href":425,"target":410,"rel":426},"https:\u002F\u002Fapi.jquery.com\u002F",[412],"jQuery 1.12.4 API 文档",[33,429,430],{},[407,431,434],{"href":432,"target":410,"rel":433},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FHTML\u002FConditional_comments",[412],"MDN：条件注释（Conditional comments）",[13,436,437],{},[25,438,439],{},"简要说明",[30,441,442,448,454,460],{},[33,443,444,447],{},[25,445,446],{},"Eleventy","：静态站点生成器，构建时渲染全部页面，输出纯 HTML。",[33,449,450,453],{},[25,451,452],{},"Nunjucks","：Mozilla 开发的 JavaScript 模板引擎，本站用于组件化与数据渲染。",[33,455,456,459],{},[25,457,458],{},"jQuery 1.12.4","：jQuery 1.x 系列末版，兼容 IE6 及以上浏览器。",[33,461,462,465],{},[25,463,464],{},"条件注释","：Internet Explorer 专属的 HTML 注释语法，用于向特定版本 IE 加载专用资源。",[467,468,469],"style",{},"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 pre.shiki code .sCdxs, html code.shiki .sCdxs{--shiki-default:#F8F8F2}html pre.shiki code .s8I7P, html code.shiki .s8I7P{--shiki-default:#F92672}html pre.shiki code .sHkqI, html code.shiki .sHkqI{--shiki-default:#A6E22E}html pre.shiki code .s_Ekj, html code.shiki .s_Ekj{--shiki-default:#E6DB74}",{"title":114,"searchDepth":471,"depth":471,"links":472},2,[473,474,475,476,477],{"id":19,"depth":471,"text":20},{"id":64,"depth":471,"text":65},{"id":332,"depth":471,"text":333},{"id":366,"depth":471,"text":367},{"id":385,"depth":471,"text":386},"2026-10-03","md",{},true,"\u002Fsite-migration-compliance-2026-10-03",{"title":7,"description":15},"site-migration-compliance-2026-10-03",[486,487,488],"技术架构","迁移","公告","I5WZy1gbyyF-BrpyA0tPrpwRa21nFwadDoAgqXlaHCo",1794733997098]