国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
入門(mén)
通過(guò)Lunr.js實(shí)施倒立索引
gatsby-node.js中創(chuàng)建索引
添加搜索表格組件
創(chuàng)建搜索結(jié)果頁(yè)面
持續(xù)的搜索小部件(tartanify.com示例)
使小部件持續(xù)
自定義搜索查詢?cè)鰪?qiáng)功能
結(jié)論
首頁(yè) web前端 css教程 如何將LUNR搜索添加到您的Gatsby網(wǎng)站

如何將LUNR搜索添加到您的Gatsby網(wǎng)站

Apr 07, 2025 am 09:54 AM

如何將LUNR搜索添加到您的Gatsby網(wǎng)站

Jamstack Architecture在網(wǎng)站開(kāi)發(fā)方面獲得了重大吸引力。您是否探索過(guò)Gatsby,Nuxt或Grysome?它們的易用性和預(yù)先建造的功能通常令人印象深刻。但是,搜索功能并不總是一個(gè)內(nèi)置功能,對(duì)內(nèi)容豐富的網(wǎng)站提出了挑戰(zhàn)。我們可以在沒(méi)有服務(wù)器端組件的情況下實(shí)現(xiàn)強(qiáng)大的搜索嗎?

jamstack固有地缺乏內(nèi)置的搜索功能。這需要仔細(xì)考慮和實(shí)施。雖然存在選項(xiàng),例如Algolia的搜索服務(wù)(對(duì)免費(fèi)計(jì)劃的限制)或使用WPGRAPHQL和APOLLO客戶端利用WordPress的搜索,但本文側(cè)重于客戶端解決方案。

我們將使用Lunr.js構(gòu)建搜索索引,并將搜索集成到Gatsby站點(diǎn)中,Lunr.js是一個(gè)輕巧的JavaScript庫(kù),可提供可擴(kuò)展且可自定義的搜索,而無(wú)需外部服務(wù)器依賴關(guān)系。我們最近在tartanify.com上使用它來(lái)添加“按塔爾坦名稱搜索”功能,克服了與持續(xù)的實(shí)時(shí)搜索有關(guān)的挑戰(zhàn)。本文將詳細(xì)介紹這些挑戰(zhàn)和解決方案。

入門(mén)

為簡(jiǎn)單起見(jiàn),我們將使用官方的Gatsby博客入門(mén)者。這摘要靜態(tài)網(wǎng)站創(chuàng)建的許多方面。跟隨:

 Gatsby New Gatsby-Starter-Blog https://github.com/gatsbyjs/gatsby-starter-blog
CD Gatsby-Starter-Blog
蓋茨比發(fā)展

這將創(chuàng)建一個(gè)帶有三個(gè)帖子的小博客,可在http://localhost:8000/ 。檢查http://localhost:8000/__graphql顯示可用數(shù)據(jù)。

通過(guò)Lunr.js實(shí)施倒立索引

Lunr采用了記錄級(jí)的倒置索引。這將站點(diǎn)上的每個(gè)單詞都映射到其位置(頁(yè)面路徑)。我們確定哪些字段(標(biāo)題,內(nèi)容,描述等)提供索引關(guān)鍵字。

對(duì)于我們的博客,我們將索引標(biāo)題和內(nèi)容。標(biāo)題很簡(jiǎn)單,但內(nèi)容需要清潔。最初,使用rawMarkdownBody由于Markdown語(yǔ)法而被證明是有問(wèn)題的。我們將使用html字段和striptags軟件包來(lái)刪除HTML標(biāo)簽。有關(guān)詳細(xì)信息,請(qǐng)參閱LUNR文檔。

這是LUNR索引創(chuàng)建和人口片段(以后在gatsby-node.js中使用):

 const index = lunr(function(){
  this.ref('slug')
  this.field('title')
  this.field('content')
  對(duì)于(文檔的const doc){
    this.add(doc)
  }
}))

documents是一系列對(duì)象,每個(gè)對(duì)象都帶有slugtitlecontent

 {
  slug:'/post-slug/',,
  標(biāo)題:“帖子標(biāo)題”,
  內(nèi)容:“發(fā)布所有HTML標(biāo)簽的內(nèi)容。”
}

我們定義一個(gè)唯一的文檔密鑰( slug )和兩個(gè)字段( titlecontent )。所有文檔都迭代添加。

gatsby-node.js中創(chuàng)建索引

首先,安裝必要的庫(kù):

紗線添加lunr graphql型json striptags

接下來(lái),修改gatsby-node.js 。該文件在站點(diǎn)構(gòu)建過(guò)程中執(zhí)行,使我們可以添加索引創(chuàng)建。我們將使用Gatsby Api createResolvers創(chuàng)建一個(gè)新的根場(chǎng)LunrIndex 。

Gatsby的數(shù)據(jù)存儲(chǔ)和查詢功能通過(guò)GraphQL字段解析顯示。 getAllNodes檢索指定類型的節(jié)點(diǎn):

 / * gatsby-node.js */
// ...(導(dǎo)入)

exports.CreateReSolvers =({cache,createresolvers})=> {
  createresolvers({
    詢問(wèn): {
      lunrindex:{
        類型:GraphQljSonObject,
        分辨:(源,args,context,info)=> {
          cont blognodes = context.nodemodel.getAllNodes({type:`markdownRemark`});
          const type = info.schema.getType(`markdownRemark`);
          返回createIndex(blognodes,type,cache);
        },,
      },,
    },,
  });
};

// ...(createIndex函數(shù))

createIndex函數(shù)利用Lunr片段:

 / * gatsby-node.js */
// ...(導(dǎo)入)

const createIndex = async(blognodes,type,cache)=> {
  // ...(用于獲取和處理數(shù)據(jù)的實(shí)現(xiàn),包括緩存)
};

(省略了完整的createIndex函數(shù),包括數(shù)據(jù)獲取,處理和緩存,但對(duì)于簡(jiǎn)潔起見(jiàn),但對(duì)于功能實(shí)現(xiàn)至關(guān)重要。原始響應(yīng)提供了此細(xì)節(jié)。)這確保僅在必要時(shí)重建索引。

添加搜索表格組件

創(chuàng)建搜索表單組件( src/components/search-form.js ):

 // ...(搜索表格組件實(shí)現(xiàn))

(對(duì)于簡(jiǎn)潔而言,省略了完整的組件實(shí)現(xiàn),但在原始響應(yīng)中已詳細(xì)介紹。)此組件處理表單提交和輸入更改,并用查詢參數(shù)導(dǎo)航到/search 。

創(chuàng)建搜索結(jié)果頁(yè)面

創(chuàng)建一個(gè)搜索結(jié)果頁(yè)面( src/pages/search.js ):

 // ...(搜索結(jié)果頁(yè)面實(shí)現(xiàn))

(對(duì)于簡(jiǎn)潔而言,省略了完整的頁(yè)面實(shí)現(xiàn),但在原始響應(yīng)中詳細(xì)介紹。)此頁(yè)面使用LunrIndex數(shù)據(jù)顯示搜索結(jié)果。

持續(xù)的搜索小部件(tartanify.com示例)

tartanify.com示例演示了一個(gè)持久的即時(shí)搜索小部件。索引創(chuàng)建類似于博客示例,但更簡(jiǎn)單:

 // ...(tartanify.com的索引??創(chuàng)建)

(對(duì)于簡(jiǎn)潔而言,省略了完整的實(shí)現(xiàn),但在原始響應(yīng)中已詳細(xì)介紹。)關(guān)鍵區(qū)別是由輸入更改觸發(fā)的即時(shí)搜索功能,而不是表格提交。 useStaticQuery Hook用于數(shù)據(jù)獲取。

使小部件持續(xù)

為了在頁(yè)面上維護(hù)搜索小部件,我們使用蓋茨比的wrapPageElement API:

 // gatsby-browser.js
// ...(包裝實(shí)現(xiàn))

(在原始響應(yīng)中詳細(xì)介紹了完整的實(shí)現(xiàn)。)這將頁(yè)面內(nèi)容與搜索小部件包裝,以確保持久性。

自定義搜索查詢?cè)鰪?qiáng)功能

原始響應(yīng)詳細(xì)詳細(xì)介紹了使用Lunr query方法來(lái)改進(jìn)搜索查詢的方法,以處理模糊匹配,通配符和布爾邏輯,以獲得更好的搜索結(jié)果。本節(jié)可顯著增強(qiáng)搜索體驗(yàn)。

結(jié)論

在Jamstack網(wǎng)站中實(shí)施搜索功能是可以實(shí)現(xiàn)的,并且可以顯著改善用戶體驗(yàn)。雖然似乎與Jamstack的無(wú)狀態(tài)性質(zhì)不一致,但Lunr.js等客戶端解決方案提供了強(qiáng)大而靈活的替代方案。本文詳細(xì)介紹的仔細(xì)考慮和實(shí)施突出了通過(guò)周到的設(shè)計(jì)和開(kāi)發(fā)創(chuàng)造出色的用戶體驗(yàn)的潛力。

以上是如何將LUNR搜索添加到您的Gatsby網(wǎng)站的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

什么是'渲染障礙CSS”? 什么是'渲染障礙CSS”? Jun 24, 2025 am 12:42 AM

CSS會(huì)阻塞頁(yè)面渲染是因?yàn)闉g覽器默認(rèn)將內(nèi)聯(lián)和外部CSS視為關(guān)鍵資源,尤其是使用引入的樣式表、頭部大量?jī)?nèi)聯(lián)CSS以及未優(yōu)化的媒體查詢樣式。1.提取關(guān)鍵CSS并內(nèi)嵌至HTML;2.延遲加載非關(guān)鍵CSS通過(guò)JavaScript;3.使用media屬性優(yōu)化加載如打印樣式;4.壓縮合并CSS減少請(qǐng)求。建議使用工具提取關(guān)鍵CSS,結(jié)合rel="preload"異步加載,合理使用media延遲加載,避免過(guò)度拆分與復(fù)雜腳本控制。

什么是AutoPrefixer,它如何工作? 什么是AutoPrefixer,它如何工作? Jul 02, 2025 am 01:15 AM

Autoprefixer是一個(gè)根據(jù)目標(biāo)瀏覽器范圍自動(dòng)為CSS屬性添加廠商前綴的工具。1.它解決了手動(dòng)維護(hù)前綴易出錯(cuò)的問(wèn)題;2.通過(guò)PostCSS插件形式工作,解析CSS、分析需加前綴的屬性、依配置生成代碼;3.使用步驟包括安裝插件、設(shè)置browserslist、在構(gòu)建流程中啟用;4.注意事項(xiàng)有不手動(dòng)加前綴、保持配置更新、非所有屬性都加前綴、建議配合預(yù)處理器使用。

CSS教程,用于創(chuàng)建粘性標(biāo)頭或頁(yè)腳 CSS教程,用于創(chuàng)建粘性標(biāo)頭或頁(yè)腳 Jul 02, 2025 am 01:04 AM

TocreatestickyheadersandfooterswithCSS,useposition:stickyforheaderswithtopvalueandz-index,ensuringparentcontainersdon’trestrictit.1.Forstickyheaders:setposition:sticky,top:0,z-index,andbackgroundcolor.2.Forstickyfooters,betteruseposition:fixedwithbot

什么是圓錐級(jí)函數(shù)? 什么是圓錐級(jí)函數(shù)? Jul 01, 2025 am 01:16 AM

theconic-Gradient()functionIncsscreatesCircularGradientsThatRotateColorStopSaroundAcentralPoint.1.IsidealForPieCharts,ProgressIndicators,colordichers,colorwheels和decorativeBackgrounds.2.itworksbysbysbysbydefindefingincolordefingincolorstopsatspecificains off.

CSS自定義屬性的范圍是什么? CSS自定義屬性的范圍是什么? Jun 25, 2025 am 12:16 AM

CSS自定義屬性的作用域取決于其聲明的上下文,全局變量通常定義在:root中,而局部變量則定義在特定選擇器內(nèi),以便組件化和隔離樣式。例如,定義在.card類中的變量?jī)H對(duì)匹配該類的元素及其子元素可用。最佳實(shí)踐包括:1.使用:root定義全局變量如主題色;2.在組件內(nèi)部定義局部變量以實(shí)現(xiàn)封裝;3.避免重復(fù)聲明同一變量;4.注意選擇器特異性可能引發(fā)的覆蓋問(wèn)題。此外,CSS變量區(qū)分大小寫(xiě),且應(yīng)在使用前定義以避免錯(cuò)誤。若變量未定義或引用失敗,則會(huì)采用回退值或默認(rèn)值initial。調(diào)試時(shí)可通過(guò)瀏覽器開(kāi)發(fā)者工

CSS教程專注于移動(dòng)優(yōu)先設(shè)計(jì) CSS教程專注于移動(dòng)優(yōu)先設(shè)計(jì) Jul 02, 2025 am 12:52 AM

Mobile-firstCSSdesignrequiressettingtheviewportmetatag,usingrelativeunits,stylingfromsmallscreensup,optimizingtypographyandtouchtargets.First,addtocontrolscaling.Second,use%,em,orreminsteadofpixelsforflexiblelayouts.Third,writebasestylesformobile,the

CSS教程,用于創(chuàng)建加載旋轉(zhuǎn)器和動(dòng)畫(huà) CSS教程,用于創(chuàng)建加載旋轉(zhuǎn)器和動(dòng)畫(huà) Jul 07, 2025 am 12:07 AM

創(chuàng)建CSS加載旋轉(zhuǎn)器的方法有三種:1.使用邊框的基本旋轉(zhuǎn)器,通過(guò)HTML和CSS實(shí)現(xiàn)簡(jiǎn)單動(dòng)畫(huà);2.使用多個(gè)點(diǎn)的自定義旋轉(zhuǎn)器,通過(guò)不同延遲時(shí)間實(shí)現(xiàn)跳動(dòng)效果;3.在按鈕中添加旋轉(zhuǎn)器,通過(guò)JavaScript切換類來(lái)顯示加載狀態(tài)。每種方法都強(qiáng)調(diào)了設(shè)計(jì)細(xì)節(jié)如顏色、大小、可訪問(wèn)性和性能優(yōu)化的重要性,以提升用戶體驗(yàn)。

如何將整個(gè)網(wǎng)格集中在視口中? 如何將整個(gè)網(wǎng)格集中在視口中? Jul 02, 2025 am 12:53 AM

要讓整個(gè)網(wǎng)格布局在視口中居中顯示,可通過(guò)以下方法實(shí)現(xiàn):1.使用margin:0auto實(shí)現(xiàn)水平居中,需設(shè)定容器固定寬度,適用于固定布局;2.利用Flexbox在外層容器設(shè)置justify-content和align-items屬性,結(jié)合min-height:100vh可實(shí)現(xiàn)垂直和水平居中,適合全屏展示場(chǎng)景;3.直接使用CSSGrid的place-items屬性在父容器上快速居中,簡(jiǎn)潔且現(xiàn)代瀏覽器支持良好,同時(shí)需確保父容器有足夠高度。每種方式均有適用場(chǎng)景和限制,根據(jù)實(shí)際需求選擇合適的方案即可。

See all articles