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

目次
はじめる
lunr.jsで倒立インデックスを?qū)g裝します
gatsby-node.jsでインデックスを作成します
検索フォームコンポーネントを追加します
検索結(jié)果の作成ページ
永続的な検索ウィジェット(tartanify.comの例)
ウィジェットを永続化します
カスタム検索クエリの拡張機(jī)能
結(jié)論
ホームページ ウェブフロントエンド CSSチュートリアル Gatsby WebサイトにLUNR検索を追加する方法

Gatsby WebサイトにLUNR検索を追加する方法

Apr 07, 2025 am 09:54 AM

Gatsby WebサイトにLUNR検索を追加する方法

Jamstackアーキテクチャは、Webサイト開(kāi)発のために大きな牽引力を獲得しています。 Gatsby、Nuxt、またはGridsomeを探索しましたか?それらの使いやすさと事前に構(gòu)築された機(jī)能は、しばしば印象的です。ただし、検索機(jī)能は常に組み込みの機(jī)能ではなく、コンテンツが豊富なサイトの課題を提示します。サーバー側(cè)のコンポーネントなしで堅(jiān)牢な検索を?qū)g裝できますか?

Jamstackには本質(zhì)的に組み込みの検索機(jī)能がありません。これには、慎重な検討と実裝が必要です。 Algoliaのサービスとしての検索(無(wú)料プランの制限がある)やWPGRAPHQLおよびApolloクライアントとの検索の活用など、オプションが存在しますが、この記事はクライアント側(cè)のソリューションに焦點(diǎn)を當(dāng)てています。

検索インデックスを構(gòu)築し、外部サーバーの依存関係なしで拡張可能でカスタマイズ可能な検索を提供する軽量JavaScriptライブラリであるLunr.JSを使用して、Gatsbyサイトに検索を統(tǒng)合します。最近、Tartanify.comで「Tartan Nameによる検索」機(jī)能を追加し、永続的なリアルタイム検索に関連する課題を克服しました。この記事では、これらの課題と解決策について説明します。

はじめる

簡(jiǎn)単にするために、Gatsbyの公式ブログのスターターを使用します。これは、靜的なWebサイトの作成の多くの側(cè)面を抽象化します。従うには:

 Gatsby New Gatsby-Starter-Blog https://github.com/gatsbyjs/gatsby-starter-blog
CD Gatsby-Starter-blog
ギャツビーが発展します

これによりhttp://localhost:8000/でアクセス可能な3つの投稿がある小さなブログが作成されます。 http://localhost:8000/__graphqlを検査すると、利用可能なデータが明らかになります。

lunr.jsで倒立インデックスを?qū)g裝します

LUNRは、レコードレベルの反転インデックスを採(cǎi)用しています。これは、サイト上の各単語(yǔ)をその場(chǎng)所(ページパス)にマッピングします。インデックス作成キーワードを提供するフィールド(タイトル、コンテンツ、説明など)を決定します。

ブログでは、タイトルとコンテンツをインデックス化します。タイトルは簡(jiǎn)単ですが、コンテンツにはクリーニングが必要です。最初にrawMarkdownBodyを使用することは、MarkDown Syntaxのために問(wèn)題があることが判明しました。 htmlフィールドとstriptagsパッケージを使用して、HTMLタグを削除します。詳細(xì)については、LUNRドキュメントを參照してください。

LUNRインデックスの作成と人口スニペット(後にgatsby-node.jsで使用)は次のとおりです。

 const index = lunr(function(){
  this.ref( 'slug')
  this.field( 'title')
  this.field( 'content')
  for(const doc of documents){
    this.add(doc)
  }
})

documents 、それぞれがslugtitle 、 contentを備えた一連のオブジェクトです。

 {
  ナメクジ: '/ポストスラグ/'、
  タイトル:「投稿タイトル」、
  コンテンツ:「すべてのHTMLタグが削除されたコンテンツを投稿します。」
}

一意のドキュメントキー( slug )と2つのフィールド( titlecontent )を定義します。すべてのドキュメントが繰り返し追加されます。

gatsby-node.jsでインデックスを作成します

まず、必要なライブラリをインストールします。

 Yarnはlunr graphql-type-json striptagsを追加します

次に、 gatsby-node.jsを変更します。このファイルはサイトビルド中に実行され、インデックス作成を追加できます。 Gatsby API createResolversを使用して、新しいルートフィールドLunrIndex作成します。

Gatsbyのデータストアとクエリ機(jī)能は、GraphQLフィールドリゾルバーを介して公開(kāi)されます。 getAllNodes指定されたタイプのノードを取得します。

 / * gatsby-node.js */
// ...(輸入)

exports.createresolvers =({cache、createresolvers})=> {
  Createresolvers({
    クエリ:{
      lunrindex:{
        タイプ:graphqljsonObject、
        Resolve :(ソース、args、context、info)=> {
          const blognodes = context.nodemodel.getallnodes({type: `markdownremark`});
          const type = info.schema.getType( `markdownremark`);
          return createIndex(blognodes、type、cache);
        }、
      }、
    }、
  });
};

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

createIndex関數(shù)は、lunrスニペットを使用します。

 / * gatsby-node.js */
// ...(輸入)

const createindex = async(blognodes、type、cache)=> {
  // ...(キャッシュを含むデータを取得して処理するための実裝)
};

(データの取得、処理、キャッシュを含む完全なcreateIndex関數(shù)は、簡(jiǎn)潔にするために省略されていますが、機(jī)能的な実裝には重要です。元の応答はこの詳細(xì)を提供します。)これにより、インデックスが必要な場(chǎng)合にのみ再構(gòu)築されるようになります。

検索フォームコンポーネントを追加します

検索フォームコンポーネント( src/components/search-form.js )を作成します。

 // ...(フォームコンポーネントの実裝を検索)

(Brevityのために完全なコンポーネントの実裝は省略されていますが、元の応答で詳しく説明されています。)このコンポーネントは、フォームの送信と入力の変更を処理し、クエリパラメーターで/searchます。

検索結(jié)果の作成ページ

検索結(jié)果ページ( src/pages/search.js )を作成します。

 // ...([結(jié)果]ページの実裝)

(Brevityのために完全なページの実裝は省略されていますが、元の応答で詳しく説明されています。)このページでは、 LunrIndexデータを使用して検索結(jié)果を表示します。

永続的な検索ウィジェット(tartanify.comの例)

Tartanify.comの例は、永続的なインスタント検索ウィジェットを示しています。インデックス作成はブログの例に似ていますが、よりシンプルです。

 // ...(tartanify.comのインデックス作成)

(Brevityのために完全な実裝は省略されていますが、元の応答で詳しく説明されています。)重要な違いは、フォームの提出ではなく、入力変更によってトリガーされるインスタント検索機(jī)能です。 useStaticQueryフックは、データフェッチに使用されます。

ウィジェットを永続化します

ページの変更全體で検索ウィジェットを維持するために、GatsbyのwrapPageElement APIを使用します。

 // gatsby-browser.js
// ...(wrappageElementの実裝)

(完全な実裝は、元の応答で詳細(xì)に説明されています。)これにより、ページコンテンツを検索ウィジェットで包み、永続性を確保します。

カスタム検索クエリの拡張機(jī)能

元の応答では、Lunrのqueryメソッドを使用して検索クエリの改善が、ファジーマッチ、ワイルドカード、およびブールロジックを処理して、より良い検索結(jié)果を得るための検索クエリの改善を詳述します。このセクションは、検索エクスペリエンスを大幅に強(qiáng)化します。

結(jié)論

Jamstack Webサイトで検索機(jī)能を?qū)g裝することは達(dá)成可能であり、ユーザーエクスペリエンスを大幅に改善できます。 Jamstackのステートレスの性質(zhì)と一見(jiàn)対立しているように見(jiàn)えますが、Lunr.JSのようなクライアント側(cè)のソリューションは、強(qiáng)力で柔軟な代替品を提供します。この記事で詳述されている慎重な検討と実裝は、思慮深い設(shè)計(jì)と開(kāi)発を通じて優(yōu)れたユーザーエクスペリエンスを作成する可能性を強(qiáng)調(diào)しています。

以上がGatsby WebサイトにLUNR検索を追加する方法の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

「レンダリングブロッキングCSS」とは何ですか? 「レンダリングブロッキングCSS」とは何ですか? Jun 24, 2025 am 12:42 AM

ブラウザは、特にインポートされたスタイルシート、ヘッダーのインラインCSS、および最適化されていないメディアクエリスタイルを使用して、ブラウザがインラインおよび外部CSSをデフォルトで主要なリソースとして表示するため、ページレンダリングをブロックします。 1.重要なCSSを抽出し、HTMLに埋め込みます。 2。JavaScriptを介して非クリティカルなCSSの読み込みを遅らせる。 3.メディア屬性を使用して、印刷スタイルなどのロードを最適化します。 4.リクエストを減らすためにCSSを圧縮およびマージします。ツールを使用してキーCSSを抽出し、REL = "Preload"非同期負(fù)荷を組み合わせ、過(guò)度の分割と複雑なスクリプト制御を避けるためにメディア遅延荷重を合理的に使用することをお?jiǎng)幛幛筏蓼埂?/p>

外部対內(nèi)部CSS:最良のアプローチは何ですか? 外部対內(nèi)部CSS:最良のアプローチは何ですか? Jun 20, 2025 am 12:45 AM

TheBestAppRoachforCSDependsonTheProject'sSpecificNeeds.forLargerProjects、externalCssissisbetterduetoMaintainasiladability; forsmallerProjectsOrsingLe-PageApplications、internalcsSmightBemoresuitable.it

私のCSSは小文字でなければなりませんか? 私のCSSは小文字でなければなりませんか? Jun 19, 2025 am 12:29 AM

いいえ、CSSDOESNOTHAVETOBEINLOWERCASE。

CSSケース感度:重要なことを理解する CSSケース感度:重要なことを理解する Jun 20, 2025 am 12:09 AM

cssismostlycase-inssensitive、buturlsandfontfamilynamesarecase-sensitive.1)propertiesandvalueslikecolor:red; areotcase-sensitive.2)urlsmustmatchtheserver'scase、例えば、/畫(huà)像/logo.png.3)

Autoprefixerとは何ですか?それはどのように機(jī)能しますか? Autoprefixerとは何ですか?それはどのように機(jī)能しますか? Jul 02, 2025 am 01:15 AM

Autoprefixerは、ターゲットブラウザスコープに基づいてCSS屬性にベンダープレフィックスを自動(dòng)的に追加するツールです。 1.エラーで接頭辭を手動(dòng)で維持する問(wèn)題を解決します。 2. PostCSSプラグインフォーム、CSSを解析し、プレフィックスする必要がある屬性を分析し、構(gòu)成に従ってコードを生成する屬性を分析します。 3.使用手順には、プラグインのインストール、ブラウザーリストの設(shè)定、ビルドプロセスでそれらを有効にすることが含まれます。 4。メモには、接頭辭を手動(dòng)で追加しない、構(gòu)成の更新を保持すること、すべての屬性ではなくプレフィックスを維持することが含まれ、プリ??プロセッサでそれらを使用することをお?jiǎng)幛幛筏蓼埂?/p>

CSSカウンターとは何ですか? CSSカウンターとは何ですか? Jun 19, 2025 am 12:34 AM

csScountersCantAnationally-bersectionSandLists.1)usecounter-resettoinitialize、counter-incrementtoincrease、andcounter()orcounters()todisplayvalues.2)を組み合わせたjavascriptfordynamiccontenttoensureaCurateupdatesと組み合わせます。

CSS:ケースはいつ重要ですか(いつそうではありませんか)? CSS:ケースはいつ重要ですか(いつそうではありませんか)? Jun 19, 2025 am 12:27 AM

CSSでは、セレクターと屬性名はケースに敏感ですが、値、名前の色、URL、およびカスタム屬性はケースに敏感です。 1.バックグラウンドカラーや背景色など、セレクターと屬性名はケース非感受性です。 2。値の16進(jìn)數(shù)色は大文字と小文字を區(qū)別しますが、赤と赤などの名前の色は無(wú)効です。 3. URLは癥例に敏感であり、ファイルロードの問(wèn)題を引き起こす可能性があります。 4.カスタムプロパティ(変數(shù))はケースに敏感であり、使用する場(chǎng)合はケースの一貫性に注意を払う必要があります。

conic-gradient()関數(shù)とは何ですか? conic-gradient()関數(shù)とは何ですか? Jul 01, 2025 am 01:16 AM

TheConic-Gradient()functionsscreateScular勾配の勾配は、測(cè)定されていることを確認(rèn)してください

See all articles