免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

從零搭建個(gè)人博客系統(tǒng)前端:原生三件套加構(gòu)建腳本實(shí)現(xiàn)

從零搭建個(gè)人博客系統(tǒng)前端:原生三件套加構(gòu)建腳本實(shí)現(xiàn) 想從零搭一套個(gè)人博客系統(tǒng)最容易出現(xiàn)的情況不是在寫(xiě)代碼而是在選型上反復(fù)橫跳——今天看框架明天看內(nèi)容管理系統(tǒng)后天又想直接套模板。我前前后后給多個(gè)朋友做過(guò)類似的博客前端最后留在我個(gè)人項(xiàng)目里的是一套沒(méi)有任何框架依賴的實(shí)現(xiàn)HTML、CSS、JavaScript 三件套加一個(gè)幾十行的構(gòu)建腳本就能完成從文章列表到詳情頁(yè)、代碼高亮、響應(yīng)式適配、靜態(tài)部署的全部流程。這篇文章我會(huì)把整套前端實(shí)現(xiàn)的完整代碼和思路拆開(kāi)講清楚適合剛接觸博客搭建、想理解博客系統(tǒng)前端到底是怎么工作的人也適合有前端基礎(chǔ)但不希望被框架束縛的朋友直接參考復(fù)現(xiàn)。1. 動(dòng)手之前先把博客前端的需求拆清楚1.1 為什么我放棄了前端框架個(gè)人博客系統(tǒng)的前端本質(zhì)上就三件事管理文章入口、展示文章列表、渲染文章正文。附帶一些標(biāo)簽、歸檔、關(guān)于頁(yè)這類補(bǔ)充頁(yè)面。它沒(méi)有復(fù)雜的用戶交互不需要數(shù)據(jù)雙向綁定不需要服務(wù)端渲染來(lái)支撐高并發(fā)絕大多數(shù)時(shí)候就是一個(gè)人寫(xiě)、一群人讀。為這個(gè)場(chǎng)景引入前端框架換來(lái)的往往是幾百 MB 的 node_modules、看不懂的抽象層和升級(jí)依賴時(shí)的不確定感。我用表格整理過(guò)原生方案和框架方案的差異放在這里供參考對(duì)比維度原生三件套前端框架方案初始門檻瀏覽器直接運(yùn)行無(wú)需構(gòu)建需要熟悉工程化工具鏈運(yùn)行依賴幾乎為零必須引入框架運(yùn)行時(shí)代碼體積可控按需編寫(xiě)即使搖樹(shù)優(yōu)化也有基礎(chǔ)體積長(zhǎng)期維護(hù)幾年后打開(kāi)仍能修改依賴升級(jí)頻繁可能出現(xiàn)兼容問(wèn)題適用場(chǎng)景內(nèi)容型網(wǎng)站、小型工具復(fù)雜交互應(yīng)用、后臺(tái)系統(tǒng)、大型協(xié)作項(xiàng)目并不是說(shuō)框架不好而是要看場(chǎng)景是否匹配。博客系統(tǒng)作為一個(gè)以內(nèi)容為核心的站點(diǎn)用戶真正關(guān)心的是文章能不能快速打開(kāi)、排版是否舒服、在手機(jī)上閱讀是否流暢。這些目標(biāo)用原生三件套完全可以達(dá)成。如果你后續(xù)計(jì)劃加入很復(fù)雜的編輯器、實(shí)時(shí)協(xié)作評(píng)論、復(fù)雜標(biāo)簽篩選系統(tǒng)那再引入框架也不遲一開(kāi)始就上框架反而妨礙你把精力放在內(nèi)容與閱讀體驗(yàn)上。1.2 目錄設(shè)計(jì)把數(shù)據(jù)和展示分開(kāi)從零動(dòng)手之前先把目錄想清楚。好的目錄結(jié)構(gòu)應(yīng)該一眼能看出什么東西放哪里。我目前維護(hù)的這套博客前端使用下面的結(jié)構(gòu)blog-front/ index.html # 首頁(yè)入口 css/ base.css # 全局樣式、變量、排版基礎(chǔ) home.css # 首頁(yè)文章列表樣式 post.css # 文章詳情頁(yè)樣式 js/ data.js # 文章元信息數(shù)據(jù)構(gòu)建時(shí)生成 markdown.js # 輕量 markdown 渲染函數(shù) router.js # hash 路由 home.js # 首頁(yè)渲染邏輯 post.js # 詳情頁(yè)渲染邏輯 posts/ # 原始文章目錄每篇一個(gè) md 文件 hello-world.md ... scripts/ build.js # 構(gòu)建腳本把 md 轉(zhuǎn)成前端要用的數(shù)據(jù) dist/ # 構(gòu)建產(chǎn)物最終部署這個(gè)目錄這個(gè)結(jié)構(gòu)的關(guān)鍵點(diǎn)是數(shù)據(jù)和展示分離。文章正文以 markdown 文件放在posts/里構(gòu)建腳本負(fù)責(zé)把 md 轉(zhuǎn)成文章數(shù)據(jù)最終給前端的是一個(gè)干凈的 JSON 或 JS 模塊。寫(xiě)新文章的人只需要關(guān)心posts/里的文件完全不需要碰前端邏輯。如果你暫時(shí)不想引入構(gòu)建腳本也可以直接把文章數(shù)據(jù)寫(xiě)在js/data.js里等文章多到管理不過(guò)來(lái)再遷移到 md 文件方案。我在項(xiàng)目開(kāi)發(fā)初期也是這么做的先跑通再優(yōu)化避免過(guò)度設(shè)計(jì)。2. 首頁(yè)骨架與文章列表先把內(nèi)容鋪出來(lái)2.1 語(yǔ)義化布局首頁(yè)的骨架結(jié)構(gòu)博客首頁(yè)的職責(zé)不是炫技而是讓訪客快速看到最新文章列表。我用的 HTML 骨架很簡(jiǎn)單但每一個(gè)標(biāo)簽都是有意圖的!DOCTYPE html html langzh-CN head meta charsetUTF-8 meta nameviewport contentwidthdevice-width, initial-scale1.0 title我的個(gè)人博客/title link relstylesheet hrefcss/base.css link relstylesheet hrefcss/home.css /head body header classsite-header div classcontainer header-inner a classlogo href#/我的博客/a nav classmain-nav ul lia href#/首頁(yè)/a/li lia href#/about關(guān)于/a/li lia href#/archive歸檔/a/li /ul /nav /div /header main classcontainer main-content section classpost-list idpostList !-- 文章列表由 JS 渲染 -- /section /main footer classsite-footer div classcontainer footer-inner p由我手工維護(hù)文章內(nèi)容采用知識(shí)共享方式分享。/p /div /footer script srcjs/data.js/script script srcjs/router.js/script script srcjs/home.js/script /body /html語(yǔ)義化標(biāo)簽不是寫(xiě)給別人看的裝飾。header、main、section、footer這些標(biāo)簽?zāi)軒椭聊婚喿x器正確識(shí)別頁(yè)面結(jié)構(gòu)也有利于搜索引擎理解內(nèi)容層級(jí)。我在早期重構(gòu)時(shí)曾把這些全換成div結(jié)果通過(guò)無(wú)障礙檢測(cè)時(shí)被扣了分后來(lái)才改回語(yǔ)義化結(jié)構(gòu)。導(dǎo)航里的鏈接統(tǒng)一用href#/這種形式配合后面的 hash 路由使用。這樣做的好處是任何靜態(tài)托管平臺(tái)都不需要額外配置服務(wù)器回退規(guī)則用戶刷新頁(yè)面不會(huì)出現(xiàn) 404。2.2 文章列表的數(shù)據(jù)結(jié)構(gòu)文章列表頁(yè)面核心是一組元信息標(biāo)題、發(fā)布時(shí)間、摘要、標(biāo)簽、唯一標(biāo)識(shí)。我在js/data.js里用一個(gè)數(shù)組保存結(jié)構(gòu)像這樣window.ARTICLES [ { id: how-to-build-blog, title: 從零搭建個(gè)人博客系統(tǒng)的前端實(shí)現(xiàn), date: 2025-01-18, excerpt: 本文記錄了一套不依賴框架的前端實(shí)現(xiàn)方案內(nèi)容包括路由、渲染、代碼高亮與響應(yīng)式適配。, tags: [前端, 博客, 教程], cover: }, { id: markdown-renderer-basics, title: 自己寫(xiě)一個(gè)夠用的 Markdown 渲染器, date: 2025-01-05, excerpt: 很多人第一時(shí)間會(huì)去引入現(xiàn)成的解析庫(kù)但理解分塊解析的原理能讓問(wèn)題定位更容易。, tags: [Markdown, 原理] } ];id字段是文章的穩(wěn)定標(biāo)識(shí)不能使用數(shù)組下標(biāo)。因?yàn)楹罄m(xù)你可能會(huì)刪除、排序或篩選文章一旦下標(biāo)變化瀏覽器里的歷史鏈接就失效了。我一開(kāi)始也偷懶用0、1、2當(dāng)下標(biāo)后來(lái)刪了兩篇文章收藏夾里的舊鏈接全部指向錯(cuò)位內(nèi)容才老老實(shí)實(shí)給每篇文章起了獨(dú)立的字符串 id。摘要字段excerpt是從正文開(kāi)頭手動(dòng)提取的。配合標(biāo)題渲染列表卡片時(shí)摘要可以讓列表頁(yè)有呼吸感也能讓訪客在點(diǎn)擊前判斷文章是否值得讀。如果你希望減少維護(hù)成本也可以在構(gòu)建腳本里自動(dòng)截取正文前 200 個(gè)字符作為摘要。2.3 列表渲染一次性插入而非循環(huán)拼接home.js里面做的事情是把ARTICLES數(shù)組渲染成 DOM 結(jié)構(gòu)。這里有一個(gè)非常重要的性能習(xí)慣不要每遍歷一條數(shù)據(jù)就操作一次 DOM。頻繁操作 DOM 會(huì)引起瀏覽器重排重繪文章數(shù)量少時(shí)感覺(jué)不明顯上到上百篇就會(huì)明顯卡頓。function renderArticleList() { const container document.getElementById(postList); if (!container || !window.ARTICLES) return; const html window.ARTICLES.map(function(article) { const tagHtml article.tags.map(function(tag) { return span classtag escapeHtml(tag) /span; }).join(); return ( article classpost-card>function parseHash() { const hash location.hash || #/; if (hash.indexOf(#/post/) 0) { const id decodeURIComponent(hash.replace(#/post/, )); return { name: post, params: { id: id } }; } if (hash.indexOf(#/about) 0) { return { name: about }; } return { name: home }; } window.addEventListener(hashchange, handleRoute); window.addEventListener(DOMContentLoaded, handleRoute); function handleRoute() { const route parseHash(); if (route.name post) { renderPostPage(route.params.id); } else if (route.name about) { renderAboutPage(); } else { renderHomePage(); } window.scrollTo(0, 0); }parseHash把#/post/hello-world解析成{ name: post, params: { id: hello-world } }handleRoute根據(jù)路由名稱調(diào)動(dòng)對(duì)應(yīng)的渲染函數(shù)。scrollTo(0, 0)是每次切換頁(yè)面后自動(dòng)回到頂部這個(gè)細(xì)節(jié)不做的話從長(zhǎng)文章底部點(diǎn)回首頁(yè)瀏覽器會(huì)停留在原來(lái)的滾動(dòng)位置觀感非常差。3.3 Markdown 渲染先轉(zhuǎn)義再解析詳情頁(yè)最核心的工作是把 markdown 轉(zhuǎn)成 HTML。很多人第一反應(yīng)就是引入大而全的解析庫(kù)但博客場(chǎng)景里其實(shí)只需要處理標(biāo)題、段落、列表、引用、代碼塊和加粗斜體這些常見(jiàn)語(yǔ)法。我自己維護(hù)了一個(gè)輕量渲染器核心思路是逐行掃描并按塊處理。下面是我在項(xiàng)目里使用的簡(jiǎn)化版本省略了嵌套列表等邊界情況但足夠覆蓋日常寫(xiě)作function renderMarkdown(markdownText) { const lines markdownText.split(\n); let html ; let inCodeBlock false; let codeLang ; let codeLines []; function flushCode() { if (codeLines.length 0) return; const codeHtml codeLines.map(escapeHtml).join(\n); html precode classlanguage- codeLang codeHtml /code/pre; codeLines []; codeLang ; } for (let i 0; i lines.length; i) { const line lines[i]; if (line.indexOf() 0) { if (!inCodeBlock) { inCodeBlock true; codeLang line.replace(, ).trim(); } else { inCodeBlock false; flushCode(); } continue; } if (inCodeBlock) { codeLines.push(line); continue; } if (line.indexOf(### ) 0) { html h3 escapeHtml(line.slice(4)) /h3; } else if (line.indexOf(## ) 0) { html h2 escapeHtml(line.slice(3)) /h2; } else if (line.indexOf(# ) 0) { html h1 escapeHtml(line.slice(2)) /h1; } else if (line.indexOf(- ) 0) { html li escapeHtml(line.slice(2)) /li; } else if (line.trim() ) { html /li/ul; } else { html p escapeHtml(line) /p; } } if (inCodeBlock) { flushCode(); } // 把孤立的 li 包裹進(jìn) ul html html.replace(/li/g, ulli); html html.replace(/\/li\/ululli/g, /lili); html html.replace(/\/liul/g, /li); // 鏈接轉(zhuǎn)換 html convertLinks(html); return html; }這段代碼里最容易出錯(cuò)的地方是轉(zhuǎn)義順序。必須先對(duì)文本內(nèi)容做escapeHtml再去解析 markdown 語(yǔ)法標(biāo)記否則員工寫(xiě)的script示例代碼會(huì)被瀏覽器當(dāng)成真實(shí)標(biāo)簽執(zhí)行。代碼塊內(nèi)容尤其要小心我在函數(shù)里單獨(dú)維護(hù)了一個(gè)inCodeBlock狀態(tài)遇到代碼塊就原樣收集、整體轉(zhuǎn)義不做 markdown 語(yǔ)法解析這樣可以避免代碼里的#被誤解析成標(biāo)題。如果你覺(jué)得自研解析器太粗糙生產(chǎn)環(huán)境中接一個(gè)成熟的開(kāi)源 Markdown 解析庫(kù)完全合理。關(guān)鍵不是“自己寫(xiě)”或“用庫(kù)”而是你要理解解析的基本原理這樣當(dāng)渲染結(jié)果出現(xiàn)異常時(shí)你能快速判斷問(wèn)題在解析器、轉(zhuǎn)義還是 CSS。3.4 目錄生成與閱讀進(jìn)度長(zhǎng)文章的閱讀體驗(yàn)里目錄和進(jìn)度提示是兩個(gè)加分項(xiàng)。目錄可以基于渲染后的標(biāo)題生成在renderMarkdown返回的 HTML 里找出所有h2、h3提取文本和錨點(diǎn)然后渲染到側(cè)邊欄或文章頂部。錨點(diǎn)可以利用標(biāo)題文本的哈希值實(shí)現(xiàn)不過(guò)更穩(wěn)妥的方式是在生成標(biāo)題時(shí)寫(xiě)入穩(wěn)定的 id。閱讀進(jìn)度條實(shí)現(xiàn)起來(lái)也更簡(jiǎn)單監(jiān)聽(tīng)頁(yè)面滾動(dòng)讀取當(dāng)前的滾動(dòng)位置和文檔總高度計(jì)算百分比后更新進(jìn)度條寬度。代碼不超過(guò)二十行window.addEventListener(scroll, function() { const progressBar document.getElementById(readingProgress); if (!progressBar) return; const scrollTop window.scrollY; const docHeight document.documentElement.scrollHeight - window.innerHeight; const progress docHeight 0 ? Math.min(scrollTop / docHeight, 1) : 0; const percent Math.round(progress * 100); progressBar.style.width percent %; });進(jìn)度條顏色用主題色漸變寬度變化加上transition閱讀時(shí)能帶來(lái)一點(diǎn)“我在推進(jìn)”的儀式感。不過(guò)要注意監(jiān)聽(tīng)滾動(dòng)事件時(shí)沒(méi)必要在每次滾動(dòng)回調(diào)里做復(fù)雜計(jì)算上面這種輕量更新完全夠用不需要引入節(jié)流函數(shù)。4. 代碼高亮與閱讀排版決定博客質(zhì)感的分水嶺4.1 代碼高亮的接入時(shí)機(jī)技術(shù)類博客里代碼塊是絕對(duì)的主角。代碼高亮方案我選的是開(kāi)源代碼高亮腳本語(yǔ)言包按需加載體積可控。接入時(shí)有一個(gè)關(guān)鍵順序必須在 markdown 渲染完成、HTML 已經(jīng)插入頁(yè)面之后再調(diào)用高亮函數(shù)否則高亮腳本找不到需要處理的代碼塊。link relstylesheet hrefhttps://cdn.example.com/highlight/styles/default.min.css script srchttps://cdn.example.com/highlight/highlight.min.js/script script // 在頁(yè)面文章渲染完成后執(zhí)行 function highlightCode() { document.querySelectorAll(pre code).forEach(function(block) { hljs.highlightElement(block); }); } /script如果你的代碼高亮 CDN 訪問(wèn)不穩(wěn)定也可以把高亮腳本下載到本地靜態(tài)資源目錄構(gòu)建時(shí)一并輸出到dist。對(duì)于訪問(wèn)量不大的個(gè)人博客我并不推薦把所有語(yǔ)言包都打進(jìn)去按需加載你常用的幾種語(yǔ)言即可。如果博客里貼的都是 JavaScript、CSS 和 bash 片段沒(méi)必要為幾十種語(yǔ)言包多付出幾倍體積。高亮樣式要注意適配深色模式。很多高亮主題默認(rèn)底色是白色一旦頁(yè)面切換深色主題代碼塊會(huì)變成一塊亮晃晃的白板。我自己用過(guò)一種做法是淺色模式用默認(rèn)亮色主題深色模式覆蓋pre的background-color同時(shí)把文字亮度稍微壓低保證不刺眼。4.2 正文排版比寬窄更重要的是節(jié)奏代碼高亮解決的是“代碼好不好看”而正文排版決定整篇文章讀起來(lái)舒不舒服。我總結(jié)出的博客排版參數(shù)大致是這樣一組.post-content { max-width: 42rem; margin: 0 auto; font-size: 1.0625rem; line-height: 1.8; color: #2d3748; } .post-content h2 { font-size: 1.5rem; margin-top: 2rem; margin-bottom: 1rem; } .post-content h3 { font-size: 1.25rem; margin-top: 1.5rem; margin-bottom: 0.75rem; } .post-content p { margin-bottom: 1.25rem; } .post-content code { font-family: JetBrains Mono, Fira Code, Consolas, monospace; font-size: 0.9em; padding: 0.15em 0.4em; background: rgba(0, 0, 0, 0.06); border-radius: 4px; } .post-content pre code { display: block; padding: 1rem 1.25rem; overflow-x: auto; background: #1e1e2e; color: #cdd6f4; border-radius: 8px; }max-width: 42rem是我反復(fù)試出來(lái)的舒適閱讀寬度。太窄時(shí)每行字?jǐn)?shù)太少眼睛來(lái)回跳動(dòng)頻繁太寬時(shí)視線容易串行。行高 1.8 給文字留出足夠呼吸空間。正文里的行內(nèi)代碼和獨(dú)立代碼塊要區(qū)分開(kāi)行內(nèi)代碼用小圓角淺色背景獨(dú)立代碼塊則用深色背景橫向滾動(dòng)。4.3 深色模式不要搞顏色災(zāi)難深色模式的實(shí)現(xiàn)不需要引入任何插件用 CSS 變量就能干凈地完成。定義一組語(yǔ)義變量通過(guò)>:root { --bg-color: #ffffff; --text-color: #2d3748; --card-bg: #f7fafc; --border-color: #e2e8f0; } [data-themedark] { --bg-color: #1a1b26; --text-color: #cbd5e1; --card-bg: #24283b; --border-color: #334155; } body { background: var(--bg-color); color: var(--text-color); }切換按鈕綁定一個(gè)點(diǎn)擊事件修改document.documentElement的>.container { width: 100%; max-width: 1200px; margin: 0 auto; padding: 0 1rem; } .main-content { display: grid; grid-template-columns: 1fr; gap: 2rem; } media (min-width: 768px) { .main-content { grid-template-columns: 1fr 260px; } } media (min-width: 1024px) { .main-content { grid-template-columns: 1fr 320px; } }網(wǎng)格布局讓側(cè)邊欄在窄屏自動(dòng)掉到下方不需要額外調(diào)整 HTML 結(jié)構(gòu)。側(cè)邊欄的內(nèi)容通常是標(biāo)簽云、最近文章列表、關(guān)于博主的一句話。移動(dòng)端訪問(wèn)時(shí)這些東西應(yīng)該放在主內(nèi)容之后避免讓讀者先看到一堆輔助信息再看到文章。5.2 移動(dòng)端導(dǎo)航與觸摸體驗(yàn)移動(dòng)端最需要處理的是導(dǎo)航菜單。桌面端一行顯示的導(dǎo)航在手機(jī)上必須變成可以收起的抽屜菜單。我用一個(gè)按鈕切換菜單的展開(kāi)狀態(tài)配合 CSS 類名控制顯隱button classmenu-toggle idmenuToggle aria-label打開(kāi)導(dǎo)航菜單 span/spanspan/spanspan/span /button nav classmain-nav idmainNav ul lia href#/首頁(yè)/a/li lia href#/about關(guān)于/a/li lia href#/archive歸檔/a/li /ul /nav.main-nav { display: none; } .main-nav.open { display: block; } media (min-width: 768px) { .main-nav { display: block; } .menu-toggle { display: none; } }document.getElementById(menuToggle).addEventListener(click, function() { const nav document.getElementById(mainNav); nav.classList.toggle(open); });移動(dòng)端還有一個(gè)移動(dòng)端特有的坑min-height: 100vh在部分移動(dòng)瀏覽器上會(huì)把地址欄算進(jìn)去導(dǎo)致頁(yè)面底部被遮擋或滾動(dòng)異常。我的處理方式是優(yōu)先使用min-height: 100dvh同時(shí)保留100vh作為不支持dvh單位時(shí)的回退值。另外導(dǎo)航按鈕和文章卡片里的點(diǎn)擊目標(biāo)都盡量做到至少 44 像素見(jiàn)方這是手指點(diǎn)擊舒適度的最低要求。5.3 圖片和表格別讓頁(yè)面橫向滾動(dòng)文章里插入圖片是常見(jiàn)需求響應(yīng)式布局下圖片要能隨容器寬度縮放不能撐破父容器.post-content img { max-width: 100%; height: auto; display: block; margin: 1.5rem auto; }如果文章里有表格寬表格會(huì)泡到容器外面導(dǎo)致整個(gè)頁(yè)面出現(xiàn)橫向滾動(dòng)條這個(gè)問(wèn)題在手機(jī)上尤其明顯。一個(gè)簡(jiǎn)單的處理是把表格包進(jìn)可橫向滾動(dòng)的容器或者給table設(shè)置display: block; overflow-x: auto保證頁(yè)面主體不橫向滾動(dòng)用戶只在表格區(qū)域內(nèi)滑動(dòng)。6. 構(gòu)建與部署把博客前端變成線上項(xiàng)目6.1 本地構(gòu)建腳本自動(dòng)生成文章數(shù)據(jù)當(dāng)博客多了用手維護(hù)data.js不現(xiàn)實(shí)。我在scripts/build.js里做了一個(gè)小工具遍歷posts/目錄下所有 md 文件解析出標(biāo)題、日期、標(biāo)簽和正文輸出成前端使用的js/data.js和js/posts.js。const fs require(fs); const path require(path); const postsDir path.join(__dirname, ../posts); const outputDir path.join(__dirname, ../dist); function parseFrontMatter(content) { const match content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/); if (!match) return { meta: {}, body: content }; const meta {}; match[1].split(\n).forEach(function(line) { const idx line.indexOf(:); if (idx -1) { meta[line.slice(0, idx).trim()] line.slice(idx 1).trim(); } }); return { meta, body: match[2] }; } const articles []; const files fs.readdirSync(postsDir).filter(function(file) { return file.endsWith(.md); }); files.forEach(function(file) { const content fs.readFileSync(path.join(postsDir, file), utf8); const { meta, body } parseFrontMatter(content); articles.push({ id: file.replace(/\.md$/, ), title: meta.title || 未命名文章, date: meta.date || 2025-01-01, excerpt: meta.excerpt || body.slice(0, 200), tags: meta.tags ? meta.tags.split(,).map(function(s) { return s.trim(); }) : [], content: body }); }); const dataJs window.ARTICLES JSON.stringify(articles, null, 2) ;; fs.writeFileSync(path.join(outputDir, data.js), dataJs, utf8); console.log(構(gòu)建完成共處理 articles.length 篇文章);文章頭部用 YAML 格式維護(hù)元信息構(gòu)建腳本讀取時(shí)做一次解析。這樣新文章只需要新建一個(gè) md 文件在文件最頂部寫(xiě)上標(biāo)題、日期、標(biāo)簽運(yùn)行構(gòu)建腳本就能刷新整個(gè)站點(diǎn)數(shù)據(jù)。6.2 部署到靜態(tài)托管的注意事項(xiàng)構(gòu)建產(chǎn)物就是dist/下的靜態(tài)文件一個(gè) HTML、幾個(gè) CSS、幾個(gè) JS以及圖片資源。部署到任何靜態(tài)托管平臺(tái)都很簡(jiǎn)單本質(zhì)是把文件夾上傳上去。部署時(shí)我踩過(guò)一個(gè)看起來(lái)不大但很影響體驗(yàn)的坑資源路徑必須使用相對(duì)路徑或與部署路徑完全匹配的絕對(duì)路徑。如果博客部署在域名子路徑下比如example.com/blog/而 HTML 里寫(xiě)成link relstylesheet href/css/home.css那瀏覽器會(huì)去域名根目錄找資源大概率 404。用./css/home.css這類相對(duì)路徑能規(guī)避這個(gè)問(wèn)題但要注意 hash 路由切換頁(yè)面后相對(duì)路徑依然基于 HTML 文件位置解析所以靜態(tài)資源相對(duì)路徑在 hash 模式里不會(huì)出問(wèn)題。自定義域名和 HTTPS 證書(shū)這類設(shè)置不同平臺(tái)有不同操作入口但思路一致把 DNS 解析指向托管平臺(tái)提供的目標(biāo)地址然后在平臺(tái)側(cè)完成域名綁定和證書(shū)配置。證書(shū)配置一般只要點(diǎn)開(kāi)“啟用 HTTPS”按鈕剩下由平臺(tái)處理。6.3 還可以繼續(xù)完善的方向基礎(chǔ)版博客上線之后有幾個(gè)高性價(jià)比功能值得繼續(xù)加文章頁(yè)獨(dú)立設(shè)置document.title避免所有頁(yè)面都是同一個(gè)站點(diǎn)名文章列表加loadinglazy實(shí)現(xiàn)圖片懶加載做一個(gè)簡(jiǎn)單的站內(nèi)搜索用關(guān)鍵詞在文章標(biāo)題和摘要里做匹配標(biāo)簽歸檔頁(yè)點(diǎn)擊標(biāo)簽篩選出相關(guān)文章生成按日期的歸檔索引這些不會(huì)改變博客系統(tǒng)的整體架構(gòu)都是在現(xiàn)有數(shù)據(jù)結(jié)構(gòu)上追加渲染邏輯。內(nèi)容型站點(diǎn)的優(yōu)勢(shì)就在這里——核心功能保持穩(wěn)定外圍功能按需疊加不會(huì)因?yàn)橐粋€(gè)小功能就推翻重建。整套博客前端實(shí)現(xiàn)寫(xiě)下來(lái)我最想對(duì)后來(lái)者說(shuō)的是博客系統(tǒng)的前端沒(méi)有想象中那么復(fù)雜真正需要用心的地方是內(nèi)容組織、閱讀體驗(yàn)和長(zhǎng)期可維護(hù)性。不要被“全?!薄肮こ袒边@些詞嚇住原生三件套先把最小的閉環(huán)跑通后續(xù)有需要再優(yōu)化再擴(kuò)展。最后分享兩個(gè)實(shí)操小技巧。一是渲染列表時(shí)永遠(yuǎn)先拼字符串再一次插入 DOM我在第 2 節(jié)已經(jīng)反復(fù)強(qiáng)調(diào)過(guò)這在高頻切換視圖時(shí)能明顯降低卡頓二是每次構(gòu)建前先清空dist/再寫(xiě)入新產(chǎn)物否則刪除的文章會(huì)殘留在舊文件中導(dǎo)致線上出現(xiàn)失效鏈接。嘗試把文章從一個(gè)平臺(tái)搬到這套系統(tǒng)中時(shí)你會(huì)直觀感受到純靜態(tài)方案在遷移自由度上的好處。按這套流程走一遍屬于你自己的博客前端很快就能跑起來(lái)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
九九热re99re6在线精品| 99se丁香| 26uuu激情五月天| 熟妇内谢69XXXXXA片| 另类图片激情五月| 操b视频在线观看一区二区| 99久视频| 99性感视频| 五月婷婷黄色毛片| 婷婷五月天 丁香五月天 裸体| 亚洲色激情| 国产av影片| 丁香色婷婷| 五月激情婷婷国产精品久久久久久| 婷婷综合亚洲| 人人超碰99| 国产综合色婷婷精品久久| 99精品视频免费在线播放| 五月婷婷久草| 日韩欧美不卡| 婷婷中文字幕| 色色色热| 六月婷婷中文字幕| 久久小片| 99热这里只有精品22| 五月丁香 狠狠爱| 丁香狠狠色婷婷| 久久久久久久11111111111| 婷婷激情社区| 色5月婷婷| jiujiu热在线视频| 激情五月天综合网| 丁香五月婷婷Av| 午夜天堂一区人妻| 无码激情AAAAA片-区区| 五月婷婷六月天| 艹| 青青草99re| 99色色网| 99热在线观看| 欧美韩国日本| 成人无码精品1区2区3区免费看| 99福利导航| 都市激情小说婷婷| 蜜乳中文字| 色情·com| 182TV大香蕉| 五月天大香蕉av| 91操碰| 婷婷网五月天| 99婷婷国产最新视频| 国产精品色婷婷AV综合色色| 日本一道久久| 五六月婷婷| 六月丁香六月婷婷欧美| 99视频35精品视频在线观看| 亚洲精品成人| 久久这里只精品66| 五月综亚洲| 激情精品久久| 丁香六月天之亚州热女| 天堂婷婷丁香六月网| 欧美噜噜久久久XXX| 天天肏屄夜夜爽| 大香蕉五月丁香| 丁香六月婷婷综合啪啪| 色五月婷婷操逼| 丁香五月天亚洲视频| 五月天四色房丁香亭亭| 大香蕉九九| 99无码超碰| 五月天婷婷激情小说电影| AV在线观看网站| 婷婷激情人妻| 99热成人| 精品国婬伦V无码久久久| 99热10在线高清播放| 日本黄 色 片| 五月狠狠| 激情无码五月天| 2050人人操免费工开爱| 免费不卡狠操美女视频网 | 五月丁香婷婷中文网| 一本久久亚洲五月婷婷| 狠狠狠色激情综合适合| 99热| 丁香五月婷婷99| 97色色综合| 激情五月婷婷| 色噜噜婷婷| 婷婷五月天第三页| 婷婷在线视频| 男人天堂99| 亚洲视频在线网| 日本3级片一区2区| 99在线视频在线观看| 亚洲狠狠干| 丁香九月激情| 亚洲AV久久久久久久久久久久久久久久| 综合99在线| 丁香五月综合婷婷| 丁香六月激情综合啪啪| 99热最新| 91视频五月丁香| 久久久妻人人人| 成人午夜天| 国产三级在线播放| 天天爽天天日人人爱| 丁香激激情网| 啪啪啪综合网| 久操热线| 色天堂在线| 91久久综合亚洲鲁鲁五月天| 丁香伍月婷电影全集| 丁香五月 无码| 熟女色专区| 婷婷五月天资源| 欧美色五月| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 99热精品在线观看| 97五月天| 五月丁香婷婷老司机| 婷婷综合视频| 五月天亚洲色| 欧美日本国产| 天天干、天天日日| www.色五月| 色欲影香| www.日本91| 99精品偷自拍| 五月色情网| 丁香六月啪啪啪| 久草九一| 丁香 婷婷 亚洲 熟女| 99久久婷婷| 99操不停| 深爱激情五月婷婷| 免费视频1区| 丁香九月综合| 五月婷婷五月天| 9超碰在线| 天天舔天天摸天天射| 久久伊人婷婷| 成人短视频在线| 婷婷色丁香六月| 国产看真人毛片爱做A片| 日本久久爽| 五月开心深深爱激情综合| 五月丁香六月婷综合成人综合| 婷婷欧美激情| 99这里有精品视频| 久热99| AV成人在线播放| 一区二区你懂的| 无码成人AAAAA毛片AI换脸| 九九性爱网| 婷婷五月天亚洲综合| 四川BBB搡BBB爽爽视频| va亚洲中文在线| 亚洲精品无码99热| 亚洲精品五月| 2020日日干| 激情丁香五月天| 婷婷九九色| 色天天综合| 久久综合99综合| 丁香伊人激情| 97干资源在线观看| 国产精品爽爽久久久久久| 欧美日韩成人h| 激情五月婷婷中文字幕| 99人人精品| 99热地址| 丁香五月天导航| 色碰碰视频| 婷婷五月情| 亚洲中文字幕av| 久99久视频| www.五月天婷婷| 丁香激惜男女| 欧洲电影在线观看免费版英语版| 人人舔人人色人人高潮| 色亭亭丁香五月天| 91婷婷搞| 亚洲色欲AAAAAA| 99久久偷拍视频| 熟女激情五月天 | 超碰色碰碰| 十月丁香九月婷婷综合| 久久久99久久| 熟女强人妻一区二区三区四区无| 久久久无码精品成人A片小说| 91在线视频综合| 色五月色五天色情网| 操日本色| 极品少妇XXXX精品少妇偷拍| 色噜噜狠噜噜视频| 99亚洲大片精品永久在线观看| 久9热视频在线| 99精品综合在线| 日本色狠狠| 午夜亚洲国产精品av一区二区| 五月丁香六月婷婷操操操| 色五月天丁香婷婷| 国产高清av黄色看片| 色婷婷婷婷五月天| 五月综亚洲| 大香人妻| 色五月六月| 色播五月丁香综合| AV在线免费播放| 久久视频在线视频| 欧美性爱五月天| 婷婷久久六月天| 99热欧美精品| 久久成人亚洲欧美电影| 五月天婷婷色| 任你日视频| 婷婷深爱色五月| 五月激情丁香啪啪| 99久久九九视频| 综合网啪| 99亚洲色| 激情亚洲色图片丁香综合| 久久9热| 国产精品色情AAAAA片软件| 婷婷六月综合基地| 天天色宗合| 99re熱| WWW、日本色丁香、co m| 久久婷婷精品| 五月亭亭六月天| 丁香五月天之婷婷影院| 国产性爱亚洲是图| 国产精品久久7777777精品无码| 九九激情视频| 日本久久极品| 天天色五月婷婷91久久久久久久| 欧美色色色色色色色| 99热这里只有精品热| 国产亚洲99久久精品| 久久香视频| 五月色综合| 五月丁香花婷婷玉莉AV| 另类小说婷婷色| 色噜噜狠狠色综合无码久久欧美| 99久久婷| 日韩一级A片黄色| 六六久久黄色| 日日噜噜夜夜狠狠久久丁香五月| 色婷婷亚洲| 欧美五月婷婷| 91精品久久久久、久五月天| 狠狠狠狠狠干| 五月香婷婷| 亚洲第一精品成人999久久精品| www.99热最新视频8| 男人天堂99| 色欧美日| 99九九在线视频| 97碰 在线视频观看| 亚洲国产精品VA在线看黑人| 99人人爽| 九九色天堂| 九月丁香婷婷网| 五月丁香婷婷五月色| 色五月综合| 九九成人视频| 成人无码精品1区2区3区免费看| 99精品免费视频| 色情五月综合婷婷| av色色国产| 人妻中文在线| 农村熟妇高潮精品A片| 久热9| 大香蕉综合| 丁香五月天色婷婷| 丁香六月婷婷色XXXX| 色综合久久久综合久久网| 99网| 九九人人看| 成人资源在线| 2015好吊操| 久热视频A.| 思思热闹这里只有精品| 婷婷成人丁香色情基地30| 影音先锋91视频| 国产小网站| www.97碰碰com| 91久久综合亚洲鲁鲁五月天| 七七九九色色| 欧美综合五月丁香六月婷| 丁香五月婷婷俺也要去| 国产熟女一区二区三区五月婷| 婷婷综合五月| www.99精品日操伊人乱碰在线| 日韩一级淫乱片一区二区三区| 久久五月天精品视频| 久久久久久久久久久44| 丁香六月婷婷综合色| 五月丁香婷婷五月色| 亚洲性爱日韩无码| 五月婷婷熟女| 久久精彩视频18| 精品一区二区三区三区| 激情六月丁香综合| 五月婷婷视频| 日韩成人中文| 操逼国产91| 丁香九月婷| 丁香啪啪| 亚洲成人中心| 五月婷婷丁香五月婷婷| 91男同| 99在线观看| 国产五月视频| 五月天婷婷基地| 婷婷激情丁五月| 午夜爱爱网站| 99热97美女| 青青草原伊人网| 五月天成人在线精品| 久久综合人妻| 播丁香五月婷婷欧美| 亚洲午夜一区二区| 五月丁香六月婷婷中合网| 天天爽天天日| 九九精品丁香花| 丁香婷婷性爱| 激情五月色婷婷| 国产AV国片偷人妻麻豆| 国产日产成人亚洲欧美国产VA| 丁香五月激情性色郤| 婷婷中文无码| 婷婷色中文| 五月夜丁香| 日日舔夜夜操| 综合网精品99| 思思热在线视频99| 在线观看免费视频| 99视频超级精品| 26uuu日韩| 香蕉久久国产AV一区二区| 色婷婷色情| 婷婷五点亚洲| 婷婷五月欧美综合| 开心五月婷婷五月| 欧美色五月| 91|九色|动漫| 九九99热久久精品66中文字幕| 日韩黄色中文字幕| 99在线视频精品| 五月婷婷色色色| 五月天激情综合网| 久久婷婷五月| 91九色欧美| 另类五月激情| 涩玖玖免费视频| 思思热在线| 丁香六月激| 五月丁香色色| 久久五月婷婷电影| 色色色网站| 色色色欧美| 91九色无码日韩| 国产a视频| 婷婷五月天亚洲激情戏精品| 202丰满熟女妇大| 热九九在线| 激情六月综合| 99亚洲综合| 丁香色五月 97干| 26uuu精品一区二区| 蜜乳中文字| 久久婷婷丁香花综合网| 五月天婷婷在线AN| 久热超碰91| 女人天堂AV| 大香蕉免费9| 99在线精品视频| 五月天停婷基地| 五月天婷婷基地| 操人视频91| 狠狠插日日干撸| 一级韩国产精品毛| 粉嫩av懂色av蜜臀av熟妇| 丁香五月色五月| 丁香五月首页| 丁香婷婷人妻综合网| 亚洲中字AV电影在线网站| 天天草天天日| 99热亚洲精品| 欧美成人精品A片免费一区99| 97人人干| 久久九九热38| 色碰碰| 精品思思久久| 波多婷婷久久| 精品网站:999WWW| 亚洲成人免费在线| 91色呦哟| 五月天停婷基地| 婷色视频| 五月丁香综合| 五月亭亭性| 超碰在线观看99| 熟妇无码乱子成人精品| 五月丁香激情综合久久| 色五月婷婷少妇人妻| 操日本99| 丁香五月天啪啪| 日韩人妻无码专区| 天天综合网~91| 五月婷婷之综合激情在线| 天天在线XXX| 99视频自拍| 少妇出轨做爰高潮A片| av色色国产| 婷婷五月激情四月综合| 99啪视频在线观看| 熟妇无码乱子成人精品| 伊人婷婷大香蕉| 激情五月网站| AV在线观看网站| AV在线不卡播放| 欧美精产国品一二三区| 思思热再线视频| 婷婷伊人綜合| 丁香狠狠干| 欧美成人色婷婷| 深情六月婷婷综合久久| 开心五月婷婷婷美女| 五月综合激情婷婷六月色窝| 亚洲第一黄网| 久久狠狠干| 日操五月婷| 伊人丁香五月婷婷潮吹| 亚洲精品V天堂中文字幕| 十一月婷婷激情四射| 亚洲婷婷丁香五月天激情小说| 99丁香五月婷婷在线| 欧美激情综合| 高清无码.com| 婷婷情色五月天| 操逼电影免费看| 亚洲成人一区| 丁香婷婷六月| 99久久99热这里只有精品| 色噜噜综合网| 激情久久综合网| 亚洲午夜在线视频| 成人短视频免费| 99热| 丁香五月天之婷婷影院| 91爱操| 国产日日操夜夜操的肉棒视频| 丁香六月天婷婷在线| 超碰在线99热| 91日视频| 丁香久久五月婷综合| 日本三级99人妇网站| 五月婷婷基地| 天天日夜夜爽| 中字幕视频在线永久在线观看免费| 停停五月丁香| 五月丁香六月激情综合欧美| 99精品22| 激情五月小说婷婷| 开心激情网在线| 五月情丁香色| 五月天激情网址| 人人爽在线视频综合网| WWW.五月天9999| 婷婷色吧| 在线中文字幕av| 五月婷婷中文字幕| 色色色婷婷五月| 99人人操人人操人人精| 日韩人妻在线观看| 99思思在线视频| 婷婷丁香五月天综合AV| 日本三级中国三级99| 丁香婷婷五月综合影院| 婷婷五月天丁香花| 日本婷婷综合精品| 色小说五月婷婷| 天天摸日日舔狠狠添婷婷婷| 17.c黄色| 亚洲va成人va成人va在线观看| 久久狠狠干| 九九热最新| 日韩人妻在线观看| Av九九| 99久久99九九九99九他书对| 激情综合一| www.狠狠| 五月天开心网| 色婷婷精品视频在线播放| 伊人成综合五月婷婷| 色五月婷婷伊人| www.99精品日操伊人乱碰在线| 精品综合网在线| 热99久| 97狠狠色| 9精品久久999| 日日噜噜久久婷婷五月天| 婷婷久久伊人| 色久婷婷五月| 爱草视频在线观看| 婷婷99狠狠| 久9视频| 中国丰满熟女A片免费观| 色欲AVV| 激情五月综合第一页| 亚洲av免费在线| 色天天久婷婷| 人人草人人视| AV在线观看网站| 99热这里只有精品9| 久99久视频精品| 丁香五月婷婷亚洲色图| 都市激情五月婷婷综合| 99热丁香| 在线免费视频caop| 久久伊人大香蕉| 欧美综合激情五月天| www.五月婷婷.com| 午夜在线成人网站免费观看| eeuss人妻| 六月丁香激情网| 天天干天天拍| 九九热在线99| 3www激情| www.色五月| 天天色中文字幕女优AV| 成人AV在线电影| 久久66成人网站| 五月丁香婷婷六月| 六月丁香成人| 激情综合网 激情五月天| 97人人干人人操| 亚洲午夜国产成人电影VA国产欧…| 97碰久久| 日韩aaaaa| 色五月在线播放| 午夜丁香 婷婷| 亚洲 在线 性爱 | www.六月丁香看AV| 综合五月天| 原琪琪色影院| 综合在线色婷婷| 狠狠精品干练久久久无码中文字幕| 久久蜜臀婷婷| 思思热热久久| 国产精品国产成人国产三级| 中文字幕五月久久婷| 久久久精久人妻| 色婷婷五月天偷拍| 五月婷视屏在线观看| 99超级碰免费视频| 久久五月婷婷电影| 91碰碰碰| 玖久久网站| 狠狠久久婷五月综合色| 色婷婷av在线观看| 天天色情站| 天天干夜夜谢| 久久中文人妻系列| 99.N在线视频| 天天综合网~91综合网| 亚洲精品99| 九九色网专区| 97婷婷丁香五月| 精品久久久久成人码免费动漫| 狠色狠色狠狠色综合网| 99精品热| 99热久久这里只有精品| 日日色综合| 天天射综合网站| 色噜噜狠狠色综合日日| 久久最新色色色| 99色色视频| 久久五月天婷婷视频| 99热8| 亚洲操逼片| 亚洲成人免费电影| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 日本社区五月天激情| 久久久婷婷五月天| 日韩草草草草草草草草草草草草| 亚洲中文字幕在线观看| 五月天婷婷色小说| 玖玖@三月天天丁香婷婷| 色欲色香伊人| 女操碰| 日韩无码色色| 色婷婷激情小说网| www.久99| 美欧成人视频| 伊人久久激情图区五月| 婷婷五月天A V| 精品久久久人妻| 97热九九| 综合色播| 99小视频网站| 欧美97色| 五月天婷婷色| 五月天狠狠网站| 99热久久这里只有精品| 678五月丁香亚洲综合| 天天舔天天摸天天射| 少妇人妻偷人精品无码视频新浪| 国产成人+亚洲+欧洲| 99九九视频| 丁香五月偷拍| 激情六月一二| 99自拍视频在线| AAA久久| 天天干天天色天天干| 大香蕉婷婷丁香| 操99| 色播五月天激情| VA五月激情在线| 九月性爱网| 婷婷五月亚洲综合| 精品三区影院| 亚洲色啪| 秋霞网在线免费基地五月婷婷丁香| 超碰在线观看9| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 五月丁香爱婷婷深深| 丁香婷婷五月| 日韩十国产极品久久| 欧洲不卡视频| 青青操日本摸摸看看| 九九精品99| 久久人妻高清中文| 五月天丁香婷婷社区| 性无码专区无码| 亚洲成人黄色网| 亚洲性天天| 射琪琪| 国产真实乱对白精彩| 久久伊人9| 人人看人人草人人摸| 色婷操逼| 婷婷久久图片| 熟妇高潮一区av| 能看的AV| 成人网址在线观看| 五月色综合| 这里只有精品视频在线观看免费| 色播播婷婷| 色色色999| www.色综合.com| 人草人人| 久久99这里只有精品视频 | 五月婷婷就去色| 丝袜人妻| 中文字幕成人影视| 爱久久小说下载网| 五月婷婷六月激情| 久久香蕉丁香| 丁香五月成人网| 99愛国产| 久久机热这里只有精品| 成人AV在线网站| 999婷婷综合| 丁香色影院| 日本玖玖在线| 丁香五月亚洲婷婷| 亚洲欧洲自拍图片专区五月天| 婷婷伊人綜合中文字幕小说| 99操久久| 久久激情五月婷婷| 久久大香蕉同僚| 久久婷婷五月天激情| 久人人操| 五月99久久| 日韩色色一区| 九色在线观看91av| 天堂综合久久| 婷婷射丁香| 伊人激情啪啪| 99色在线视频观看| 99热欧| 婷婷激情六月综合| 天天操夜夜肏| 婷婷五月花丁香| 千人斩操逼| 婷婷丁香五月激情图片| 思思99精品视频在线观看| 欧美狠狠草| 亚洲欧洲99| 五月花综合网| 激情五月综合色婷婷| 管管補管管紱| 伊人五月成人| 婷婷激情人妻| 99热精品在这里| 成人精品在线观看| www.色色色com| 狠狠色综合无线观看| 天天操精品| 极品少妇婷婷五月| 9精品视频在线观看| 夜夜 操无码| 婷婷欧美色| 狠狠狠狠狠狠狠狠草| 久久综合天天综合| 欧美影院| 国产亚洲99久久精品| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 99热婷婷| 亚洲A片成人无码久久精品青桔| 成人αV视频免费观看| 色九月综合| 啪啪99| 九月激情婷婷丁香| 182TV大香蕉| 六月丁香激情网| 久久综合人妻| 久久婷婷五月综合色和| 九月婷婷激情| 奸逼视频| 亚洲精品在线视频| 熟妇人妻中文字幕无码老熟妇 | 四色女婷婷| 婷婷久久丁香| 久久久久久久人妻| 97AV人人插人人操| 日本激情ⅩXX免费视频| 九九热只有精品| 色婷婷五月天成人网| 六月丁丁香| 内射人妻视频国内| 91狠狠色色丁香婷婷综合久久| 六月色日韩| 激情综合五月婷婷六月丁香| 色综合色综合网| 五月色激情综合网| 色综合色综合色综合高潮| 婷婷五月天久久久| 日本不卡高字幕在线2019| 成人色图情色成人网 www.5b5b5bcom 五月天 | 99在线热| 99成人免费热视频| 丁香六月综合激情| 99爱在线| 欧美成人热| 超级碰碰91| 成人精品免费在线观看| 久久色五月| 国产激情在线| 91啪啪| 亚洲操B视频| 天天综合亚洲综合| 婷婷五月六月丁香| 超碰在线免费9| 五月婷婷在线综合| 亚洲综合网在线| 九九色欲网| 久久国产色| 中国无码av| 操操天堂| 99爱视频| 久久久精品99| 九九爱激情| 中字幕视频在线永久在线观看免费| 五月丁香啪综合| 九九精品热| 色五月婷婷在线观看第一页舔| 激情婷婷五月女| 婷婷五月天色色| 亚洲五月激情| 五月丁香999| 大香蕉综合在线| 亚洲综合婷婷| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 五月婷婷在线免费| 婷婷色综合中心站| 天天成人丁香美女AV| 91精品婷婷国产综合久久| 第四色网婷婷| 永久免费一区二区三区| 伦99热| 五月婷婷六月丁香在线视频免费在线观看| 中文婷婷狠狠| 亚洲日韩欧美综合VA| 丁香婷婷激情网站| 久久六月综合| 播五月婷婷开心| 99色在线视频| 婷婷五月天激情文学小说| 91狠狠综合久久| 久久婷婷人人| 五月丁香啪啪啪综合网| 色五月婷婷中文字幕| 五月婷网| 无码se| 99在线视频播放| 99热精品观看| 99亚洲精品视频| 综合综合色色| 国产人妻777人伦精品HD| 色婷婷XXXXX| 91碰碰碰| 人妻尝试久久久久久久久久久久| jiujiuxiangjiaowang| 五月丁香六月综合激情无码软件亮点| 久久久av久av久片一区二区| 五月婷婷之美女图片| 九九综合网色全集| 99re8这里只有精品99re8热视频| 看黄的网站18禁| 欧美性生交A片免费看| 久久开心五月婷婷| 五月丁香狠狠爱| 五月婷婷深爱六月| 色色五月激情| 婷婷大香蕉| 综合五月亭亭9| 免费无码毛片一区二区A片| 这里只有精彩亚洲视频推荐| 丁香婷婷老熟女综合网| 26uuu精品一区二区| www.91九色| 日产精品一线二线三线芒果| 婷婷五月天成人综合网| 色色婷婷色色| 久久婷婷亚洲| 五月婷伊人| 五月丁香A片| 涩涩涩五月天| 亚洲综合字幕色色| 99爱在线| 麻豆123区| 欧美图片丁香五月天| 色五月大香蕉| 九色啦蜜臀| 久久性爱视频免费| www99xxxx五月丁| 538在线精品| 99热这里有精品2| 五月婷在线影院| 麻豆WWWCOM内射软件| 久久综合五月天| 色五月av伊人| 久久久99婷婷久久久久久| 蜜桃人妻无码AV天堂三区| 久久机热/这里只有精品| 这里只有精品视频视频在线观看| 青青久久91| 五月天激情小说| 天天日综合| www.狠狠操.con| 精品99在线| 日本一级黄色片。| 国产激情综合| 舔色婷婷| 五月天婷婷丁香视频| 国产成人av在线| 成人在线免费网址| 免费看欧美成人A片无码| 可以直接看的av| 色婷婷XXXXX| 啪啪色激情五月天| 91色操| 丁香五月婷婷狠狠色| 97视频久久| 伊人婷婷色激情丁香| 99久久视频| 九月丁香婷婷基地| 日韩成人电影AV| 婷婷王月天影院| 少妇婷婷五月天| 激情综合网丁香| 国产黄色大片| 亚洲、欧美、国产另类笫二区| 少妇出轨做爰高潮A片| 精品五月天| 免费视频无码| 狠狠色综合久久| 五月丁香六月欧美| 色五月六月婷婷| 婷婷五月综合欧美在线播放| 热99国产精品| 1024国产| 91婷婷丁香五月亚洲| 国产精产国品一二三在观看| 九九激情网| 小视频久久久aaa| 91超碰人人操| 人人干av| 色色色色热| 丁香五月电影| 日本人妻A片成人免费看片| 超碰免费人妻| 另类激情五月| 丁香六月婷婷开心| 啪啪激情网| 五月色亚洲| 9有码中文| 五月天婷婷綜合院| www.五月天婷婷| 五月天色综合| 99亚洲视频| 久久WW| 97精品在线| 欧美日本国产欧美日本韩国99| 热99精品视频| 欧美激情综合五月色丁香| 五月天久久网站| 日日撸夜夜操| 五月婷婷激情久久| 人妻无码精品一区| 久久99久久99精品免视看婷婷| 色色色地址| 五月婷亚洲精品AV天堂| 五月婷婷六月丁香| 97在线观视频免费观看| av网址在线播放| 日韩不卡123| 久久婷婷五月综合一| 六月色激情| 婷婷综合色色| 精品99久久久久成人网站免费| 日本精品。999| 日韩抽插操逼| www.五月丁香av| 日日色综合| AV在线免费播放| 天天干天天插| 久久综合26p| 伊人久久大香天蕉亚洲特级| 伊人狠狠丁香婷婷综合尤物| 人妻射精AV| 久久人妻伦理| 十月色综合| 九九色热| 日日噜噜夜夜狠狠久久丁香五月| 国模狼狼| 色综合久久天天综合网| 天天日人人| 婷婷五月天激情文学| 久久五月天视频| 婷婷五月色花丁香社区| 美女被肏网站在线看| 97干综合网| 久久成人性爱| 五月天婷婷爱| 婷色五月| 狠狠色丁香久久综合婷婷亚洲成人福利| 亚洲免费视频网站| 五月六月丁香激情视频| 天天天天天操| 97丁香婷婷| 国产精品18久久久| 99人人干人人| 激情小说五月天中文字幕| 99视频| 亚洲日韩一页精品发布| 激情性爱五月| 色丁香久综合在线久综合在线观看| 成人一级片| 日韩一级一片内射视频4K| 久久香蕉丁香| 插插五月天| 99ri在线| 亚洲无码猫咪| 成人va在线观看视频| 国产精品色婷婷AV综合色色| 丁香六月婷婷综合激情欧美| 噢美99| 99热在线爱| 久久丁香五月天| www.日韩艹| 五月久久婷婷天堂视频| 丁香狠狠干| 91精品久久久久久综合五月天| 天天色色天天| 亚洲人妻av伦理| 99热主页日本| 99爱视频在线| 婷婷丁香色女人| 九九九九九无码| 丁香色六月婷婷| 丁香花五月天社区| 婷婷五月天亚洲综合| 高清无码网址| 亚洲成人高清在线| 天天色激情| 五月综合久久| 玖玖国产视频一区| 色婷婷免费视频| 亚洲在线成人| 五月丁香激情六月| 狠狠干在线| 欧美色久| 超碰9| 99免费在线视频| 日韩十国产极品久久| 国产精品日日躁夜夜躁| 天天操天天插天天射| 国产精品-91JQ就要激情网91JQ6.91JQ27.CASA:16888 | 91九九九九九九| 无码中文一区二区三区| 大香蕉久久| 色色99| 五月婷av| 精品激情| 久久女人天堂| 天天日夜夜欢| 久久玖玖综合| 久re在线| 五月丁香综合精品| 精品人妻一区二区三区在| www。88热在线视频免费观看| 91天天操天天干天天射| 久久97| 久热人妻| 99综合免费视频| 婷婷狠狠操| 蜜桃婷婷狠狠久久| 无毒黄色网址| 丁香六月婷婷综合在线| 嫩草视频。| 婷婷五月天激情免费在线观看| 另类亚洲电影| 五月草视频| 婷婷色基地在线看 | 五月婷婷日| 91色综合网| 丁香六月色婷婷| 色综合激情| 六月婷婷日| 九九无码AV| 播五月丁香六月| 免费操超碰| 色爱99| 六月米奇色综合| 色婷婷小说网| 六月丁香婷婷开心综合基地| 色婷婷五月天av在线| 思思热久热| 97极品在线| 五月天婷婷久久| 五月天中文字幕在线婷婷| 亚洲日本三级片| 九九热精品99| 99综合色色色| 人人艹艹艹| 天天舔天天插天天爱| 成人免费120分钟啪啪| 婷婷五月色亚洲| 亚洲AV无码成人精品区电影网| WWW,五月| 在线A色| 激情五月丁香六月综合AVXXXX| 丁香五月婷久久| 五月天性色| 一起草av在线观看| 天天狠天天叉| 十月丁香九月婷婷综合| 婷婷中文无码| 成人国产欧美大片一区| 色噜噜狠狠色综无码久久合欧美 | 五月丁香亚洲校园欧美| 少妇熟女视频一区二区三区 | 久久婷婷视频| 免费试看小视频 99| 丁香五月综合无码趴趴| 日本一级| 婷婷五月天少妇| 一起肏在线视频| 嫩BBB槡BBBB搡BBBB视频| 成人一级片| 色婷婷六月| 日本三级中国三级99| 五月丁香花开综合网| 99riAv1国产在线观看| 无码人妻精品一区二区蜜桃色欲| 亭亭五月色男人| 新久久五月天激情| 久久精品日| 五月激情天| 夜夜夜夜撸夜夜操| 婷婷五月花免费视频在线| 国产综合A片| 九九美女视频| 五月天偷拍| 99爱视频在线观看这里只有精品| 91人妻色色网| 精品人妻伦九区久久AAA片| 99热这里只有精品99| eeuss人妻| 丁香五婷| cao视频,现在观看| 丁香六月激情综合| 婷婷内射视频在线| 婷婷性爱五月天| 天天肏在线观看| 天堂呦 呦百度搜索-百度搜索| 激情第四色| 色五月成人| 色五月六月婷婷| 丁香五月瑟瑟| 五月丁香最新| 九九色网专区| 免费看欧美成人A片无码| 成人国产综合| 综合激情站| 日操夜撸| 午夜精品777| 激情丁香婷婷六月天| 亚洲激情综合| 成人中文字幕在线| 日韩成人无码片| 大香蕉婷婷婷| 伊人在线视频| 久久HD| 久久五月丁香| 9 1超碰九色| 婷婷六月综合基地| 欧美va在线观看| 99国产这里只有精品| 99久久成人| 日本九九热| 五月亭亭六月激情| 久久黄色网扯| 就爱操www com| 激情深爱综合| 91色吧网| 99热综合在线| 九九热在线视频| 狠狠色无码| 色婷婷色久综| caopeng97日韩| 婷婷五月丁香高清无码| 5月婷婷综合| 五月天色狠狠| 激情五月婷婷伊人| 激情五月婷婷综合网| 2025天天爽天天摸| 丁香激情婷婷网| 五月婷免费视频久久久| 直接看的av| 很很干天天干| 欧美综合婷婷网| 五月丁香啪啪啪啪| 国产美女精品| 99九九精品视频| 五月天五月天成人网亭亭成人色网站| 久久机只有这里精品| 激情亚洲网| 久久丁香五月| 5月婷婷6月六月丁香| 日日操夜夜爽| 日本爆乳片手机在线播放| 丁香五月色色| 伊人婷婷五月天| 激情五月婷婷综合| 成人国产网站在线免费看| 天天操天天干天天射| 热婷婷av| 亚洲色夜| 色婷婷色99国产综合精品| 9久久久久久久久久久| 五月丁香综合| 激情婷婷五月天伊人在线观看| 91艹人| 激情五月丁香在线观看直播| 久久婷婷操| 日本天堂免费99| 啊v视频在线观看| 天天干天天做| 久久网址99热| 激情伊人| www.狠狠操.com| site:pnnrt.com| 九九精品热| 99在线热视频| 婷婷另类小说| 天天色2017| 97狠狠色| 国产亚洲色婷婷久久99精品91| 久久六月综合| 久久人妻视频| 亚洲182在线观看| 超碰AV在线| 日韩av干| 婷婷性福五月天| 六月丁香五月婷婷| 色婷婷狠狠禁久久| A级毛片高清免费不卡播放谢谢谢谢| 婷婷五月花| 欧美va| 超碰三级片| 九九色网专区| 91人人操人人| 天天操狠狠操| 色五月婷婷中文字幕| 五月婷婷六月丁香| 一级二级色大片| 夜夜夜夜做天天天做无码视频| 色久综合天天做视频| 婷婷的99视频网站| 日韩久久系列| 激情六月丁香综合| 视色综合| 亚洲色色色| www.第四色99| 激情五月天在线观看婷婷| 操人妻视频91| 五月大香蕉| 亚州男人天堂婷婷五月| 五月总合激情网| 开心五月网 | 日本不卡高字幕在线2019| 色婷婷丁香AV综合| 深爱激情九九五月天| 日韩人妻无码精品| 日韩美一级毛卡片| 色综合爱综合| 色婷婷成人| 日本美女97在线视频| 婷婷激情伍月网| 丁香五月婷婷六月丁香| 日韩成人不卡| 色五月色五天色情网| 五月天自拍视频| 五月丁香六月婷婷久久| 手机旧版看人妻1025| 色五月丁香五月婷婷五月成人网| 色婷婷狠狠| 五月色丁香| 亚州色色色| 色婷婷亚洲综合天堂| 五月丁香婷婷五月色| 综合色99| 色色激情网| 91碰在线| 偷拍九九五月丁香婷婷| 丁香五月开心婷婷| 亚洲成人无码专区| 久久成人综合五月天| 综合色图区| 丁香亭亭久久| 激情五月天色色| 婷婷五月娱乐在线| 亚洲男人的天堂婷婷色五月| 99热在线观看| 天天色情站| 久久ab| 99热最新| 大香蕉五月婷婷| 婷婷五月无码| 欧美婷婷综合| 日本情色一区二区| 五月叮香啪| 五月天激情日色在线| 婷婷五月亚洲一本在线丁香| 午夜AV网| 婷婷狠狠操| 大香蕉伊在| 任我肏|