이 플러그인은 베타 버전이며 아직 공식적으로 지원되지 않습니다.
질문이나 아이디어가 있으면 언제든지 이슈를 열어주세요.
실행할 쿼리 목록과 이를 인덱스할 개체 배열로 변환하는 방법을 지정할 수 있습니다. gatsby build
실행하면 해당 내용이 Algolia에 게시됩니다.
그래프 LR
A[소스 1] --> |쿼리| 개츠비
B[소스 2] --> |쿼리| 개츠비
C[소스 3] --> |쿼리| 개츠비
개츠비 --> |개츠비 빌드| 알골리아
여기에는 그다지 관련성이 없을 수도 있지만 gatsby new
의 기본 구성과 함께 작동하는 일부 데이터가 포함된 예가 있습니다.
yarn add gatsby-plugin-algolia
먼저 커밋하지 않을 .env 파일에 자격 증명을 추가합니다. 파일에서 이를 추적하면, 특히 사이트가 오픈 소스인 경우 관리 API 키가 유출됩니다. 이는 누구나 Algolia 지수에서 무엇이든 변경할 수 있음을 의미합니다.
// .env.production
ALGOLIA_APP_ID=XXX
ALGOLIA_API_KEY=XXX
ALGOLIA_INDEX_NAME=XXX
require ( 'dotenv' ) . config ( {
path : `.env. ${ process . env . NODE_ENV } ` ,
} ) ;
// gatsby-config.js
const myQuery = `
query {
pages: allSitePage {
nodes {
# querying id is required
id
component
path
componentChunkName
jsonName
internal {
# querying internal.contentDigest is required
contentDigest
type
owner
}
}
}
}
` ;
const queries = [
{
query : myQuery ,
queryVariables : { } , // optional. Allows you to use graphql query variables in the query
transformer : ( { data } ) => data . pages . nodes , // optional
indexName : 'index name to target' , // overrides main index name, optional
settings : {
// optional, any index settings
// Note: by supplying settings, you will overwrite all existing settings on the index
} ,
mergeSettings : false , // optional, defaults to false. See notes on mergeSettings below
} ,
] ;
module . exports = {
plugins : [
{
// This plugin must be placed last in your list of plugins to ensure that it can query all the GraphQL data
resolve : `gatsby-plugin-algolia` ,
options : {
appId : process . env . ALGOLIA_APP_ID ,
// Use Admin API key without GATSBY_ prefix, so that the key isn't exposed in the application
// Tip: use Search API key with GATSBY_ prefix to access the service from within components
apiKey : process . env . ALGOLIA_API_KEY ,
indexName : process . env . ALGOLIA_INDEX_NAME , // for all queries
queries ,
chunkSize : 10000 , // default: 1000
settings : {
// optional, any index settings
// Note: by supplying settings, you will overwrite all existing settings on the index
} ,
mergeSettings : false , // optional, defaults to false. See notes on mergeSettings below
concurrentQueries : false , // default: true
dryRun : false , // default: false, only calculate which objects would be indexed, but do not push to Algolia
continueOnFailure : false , // default: false, don't fail the build if Algolia indexing fails
algoliasearchOptions : undefined , // default: { timeouts: { connect: 1, read: 30, write: 30 } }, pass any different options to the algoliasearch constructor
} ,
} ,
] ,
} ;
인덱스는 Gatsby의 build
단계에서 Algolia에 제공된 인덱스 이름과 동기화됩니다. 이는 개발하는 동안 할당량을 초과하는 것을 방지하기 위해 더 일찍 수행되지 않습니다.
이 플러그인은 Gatsby 사이트에서 변경되거나 삭제된 노드만 업데이트합니다.
우리는 Gatsby의 기본 contentDigest
필드를 사용하므로 쿼리되는지 확인하세요.
각 인덱스에 대해 개별적으로(쿼리별로) 설정을 지정할 수 있습니다. 그렇지 않으면 기존 설정이 유지됩니다.
mergeSettings
사용하면 Algolia 웹사이트에서 변경한 설정을 보존할 수 있습니다. 기본 동작( mergeSettings: false
)은 인덱스 설정을 지우고 각 빌드의 구성 설정으로 대체합니다.
true로 설정하면 구성 인덱스 설정이 Algolia의 기존 인덱스 설정과 병합됩니다(구성 인덱스 설정이 우선 적용됨).
참고: mergeSettings
사용하는 경우 구성 설정에서 삭제된 설정은 Algolia에 계속 존재하므로 계속 유지됩니다. 설정을 제거하려면 구성과 Algolia 웹사이트 모두에서 해당 설정을 제거해야 합니다.
때로는 Netlify와 같은 제한된 플랫폼에서 동일한 인덱스에 대한 동시 쿼리로 인해 예기치 않은 결과가 발생하거나 빌드가 중단될 수 있습니다. concurrentQueries
false
로 설정하면 쿼리가 동시에 실행되지 않고 순차적으로 실행되므로 일부 동시 액세스 문제가 해결될 수 있습니다. 이 옵션을 사용하면 인덱싱이 그렇지 않은 경우보다 오래 걸릴 수 있다는 점에 유의하세요.
transformer
필드는 기능을 허용하며 선택적으로 async
기능을 제공할 수도 있습니다.
internal.contentDigest
가 객체보다 더 안정적인 경우 변환기 매개변수를 추가하는 것이 유용할 수 있습니다. 예를 들어 Gatsby가 제공한 internal.contentDigest
객체의 해시로 바꿀 수 있습니다.
const crypto = require ( 'crypto' ) ;
function transformer ( data ) {
return data . map ( item => {
const hash = crypto
. createHash ( 'md5' )
. update ( JSON . stringify ( item ) )
. digest ( 'hex' ) ;
return {
... item ,
internal : {
... item . internal ,
contentDigest : hash ,
} ,
} ;
} ) ;
}
이는 플러그인의 첫 번째 버전이며 아직 공식적으로 지원되지 않습니다. GitHub 문제에 모든 피드백을 남겨주세요.
이는 다음과 같은 몇 가지 이유로 발생할 수 있습니다.
개발 모드에서 gatsby-plugin-algolia
플러그인을 사용하고 있습니다. 플러그인은 gatsby build
실행할 때만 Algolia로 푸시됩니다. 이는 개발하는 동안 할당량을 초과하는 것을 방지하기 위한 것입니다.
internal.contentDigest
일부 Gatsby 플러그인은 콘텐츠가 변경된 경우에도 새로운 internal.contentDigest
를 생성하지 않습니다. 이 문제를 해결하려면 transformer
사용하여 노드의 콘텐츠를 기반으로 새 internal.contentDigest
생성하세요.