llms.txt для Gatsby
Два подхода для Gatsby: статический файл без дополнительной настройки в static/ или программная генерация в gatsby-node.js с использованием слоя данных GraphQL для создания ссылок на основе вашего контента.
Последнее обновление:
Вариант 1: статический файл в static/
Gatsby копирует всё из static/ каталог непосредственно в public/ результат сборки. Поместите файл в static/llms.txt
и он будет доступен по адресу /llms.txt после gatsby build.
# Gatsby static file approach
#
# Place your file at: static/llms.txt
# Gatsby copies everything in static/ directly to the public/ build output.
#
# Project structure:
# your-gatsby-site/
# ├── static/
# │ └── llms.txt ← add this
# ├── src/
# └── gatsby-config.js
Этот подход не требует изменений кода и работает со всеми вариантами развёртывания Gatsby: Netlify, Vercel, Cloudflare Pages, AWS Amplify, и размещённый на собственном хостинге.
Вариант 2: генерация в gatsby-node.js
Для сайтов, страницы документации которых получают из Markdown, MDX или CMS через слой данных
Gatsby, используйте onPostBuild хук жизненного цикла в gatsby-node.js для генерации llms.txt после завершения сборки. Это гарантирует,
что список ссылок всегда синхронизирован с содержимым.
// gatsby-node.js
// Generate llms.txt from your GraphQL data layer
const { writeFileSync } = require('fs');
const { resolve } = require('path');
exports.onPostBuild = async ({ graphql }) => {
// Query your documentation pages (adjust the query to your data model)
const result = await graphql(`
query {
allMarkdownRemark(
filter: { frontmatter: { collection: { eq: "docs" } } }
sort: { frontmatter: { order: ASC } }
) {
nodes {
frontmatter {
title
description
}
fields {
slug
}
}
}
}
`);
if (result.errors) {
throw result.errors;
}
const docs = result.data.allMarkdownRemark.nodes;
const siteUrl = 'https://yoursite.com';
const links = docs
.map(
(doc) =>
`- [${doc.frontmatter.title}](${siteUrl}/docs/${doc.fields.slug}/): ${doc.frontmatter.description ?? ''}`
)
.join('\n');
const content = [
'# Your Site',
'',
'> One-sentence description of your project.',
'',
'## Documentation',
'',
links,
'',
'## Optional',
'',
`- [Changelog](${siteUrl}/changelog/): Release history.`,
].join('\n');
// Write to public/ (Gatsby's build output directory)
writeFileSync(resolve(__dirname, 'public', 'llms.txt'), content, 'utf-8');
};
onPostBuild обработчик получает тот же graphql функция, используемая в запросах
страниц. Скорректируйте запрос под свою модель данных, в примере используется allMarkdownRemark но можно запросить любой исходный плагин Gatsby (allMdx, allContentfulPage, и т. д.).
Подход с плагином Gatsby
Если вам нужно готовое решение, несколько общественных плагинов генерируют llms.txt автоматически. Ищите в npm по запросу gatsby-plugin-llms-txt. В качестве альтернативы используйте подход выше в gatsby-node.js достаточно прост, поэтому для большинства проектов пользовательский плагин
почти не даёт преимуществ.
Также можно использовать gatsby-plugin-sitemap в качестве справки он использует тот
же onPostBuild шаблон для записи XML-файла в public/.
Проверить
# Build
gatsby build
# Check generated file
cat public/llms.txt | head -10
# After deploying, verify the live URL
curl -I https://yoursite.com/llms.txt
# Expected: content-type: text/plain; charset=utf-8 Связанные руководства
- Как создать llms.txt, шаблоны и контрольный список.
- Справочник формата llms.txt, подробности спецификации.
- Руководство по Eleventy, другой подход для генераторов статических сайтов.
- Руководство по Next.js, React-фреймворк с SSR.
- Валидатор · Генератор.