Я борюсь с этим долгое время. Используя плагин gatsby-source-git
, я могу получить весь контент уценки из репозитория, используя allMarkdownRemark
в запросе graphQL - директива allFile
не нужна.
Но есть проблемы с подходом Гэтсби. В моей конфигурации у меня есть:
{
resolve: 'gatsby-source-filesystem',
options: {
name: 'markdown-pages',
path: `${__dirname}/mdsource`,
},
},
{
resolve: 'gatsby-source-git',
options: {
name: 'cookie-content',
remote: 'lets say for now it is some private repo on github',
branch: 'main',
patterns: ['en/**', 'images/**'],
},
},
- Я не могу заменить 'mdsource' на '.cache / gatsby-source-git /', потому что когда
gatsby develop
запущен, такой путь еще не существует. - Когда я полностью удаляю ссылку на
gatsby-source-filesystem
из gatsby-config.js
, все происходит сбой при сборке, и узлы graphQL не читаются должным образом. - В документации к плагинам gatsby-source это явно не указано, но это похоже, что они не являются автономными плагинами и требуют
gatsby-source-filesystem
для запуска. - Использование только
gatsby-source-filesystem
без какой-либо дополнительной настройки также приводит к поломке. - Все файлы из разных источников импортируются в одно огромное дерево graphQl, и в AllMarkdownRemark невозможно определить, откуда происходит файл уценки.
В моем файле gatsby-node.js
есть функция создания слагов:
exports.onCreateNode = ({ node, getNode, actions }) => {
const { createNodeField } = actions;
if (node.internal.type === 'MarkdownRemark') {
const slug = createFilePath({ node, getNode, basePath: 'mdsource' });
createNodeField({
node,
name: 'slug',
value: slug,
});
}
};
После того, как я добавил репозиторий github в качестве дополнительного источника, я вижу, что эта функция неправильная, но я не знаю, должен ли я удалить ее полностью или изменить.
Итак, подведем итог: - как вести блог, если все данные контента извлекаются только из Github? - В чем разница между созданием страницы, созданием файла и созданием узла Markdown? Похоже, что все содержимое всех страниц существует в виде значений в json, поэтому нет необходимости физически хранить файл на диске.