Исходные данные из любого места, для следующего.js, nuxt.js, Mitest и многое другое.
✅ Вдохновленный Гэтсби, вы можете запросить любые данные (Markdown, API, база данных, CMS) с GraphQL
✅ Автоматически генерируйте клиент JavaScript для лучшего опыта разработки
✅ Framework Agnostic работает с любыми рамками, которые имеют поддержку SSG
✅ Тонны плагинов для популярного безголового CMS (еще нет, нам нужен ваш вклад!)
yarn add mordred В next.config.js :
const { withMordred } = require ( 'mordred/next' )
module . exports = withMordred ( {
// Extra Next.js config..
} ) Затем создайте mordred.config.js в том же каталоге и используйте некоторые плагины:
module . exports = {
plugins : [
// Load markdown files from file system
{
resolve : 'mordred-source-filesystem' ,
options : {
// This is where you'll be creating Markdown files
path : __dirname + '/content' ,
} ,
} ,
// Transform files to markdown nodes
{
resolve : 'mordred-transformer-markdown' ,
} ,
] ,
}Вам также нужно установить эти плагины:
yarn add mordred-source-filesystem mordred-transformer-markdown Создайте файл разметки в папке content (в корне проекта), например, content/my-first-posts.md :
---
title : My First Post
date : 2020-04-24
---
This is my ** first ** post! Когда вы запустите next или next build , Mordred генерирует клиент GraphQL в mordred/graphql.js , затем вы можете использовать сгенерированный клиент для данных запроса.
Вы должны добавить эту папку в .gitignore :
mordred/
Теперь на любой странице данные запроса в getStaticProps :
import { client } from '../mordred/graphql'
export const getStaticProps = async ( ) => {
const { allMarkdown } = await client . query ( {
allMarkdown : [
{
limit : 20
} ,
{
nodes : {
id : true ,
slug : true ,
createdAt : true ,
updatedAt : true ,
html : true ,
frontmatter {
title : true
}
}
}
]
} )
return {
props : {
allMarkdown
} ,
}
}
export default ( { allMarkdown } ) => {
return (
< ul >
{ allMarkdown . nodes . map ( ( post ) => {
return (
< li key = { post . id } >
< Link href = { `/post/ ${ post . slug } ` } > { post . title } </ Link >
</ li >
)
} ) }
</ ul >
)
} Синтаксис client.query очень похож на GraphQL SDL, за исключением того, что он также предоставляет подсказки типа во время записи, мы используем GraphQL-Zeus для генерации клиентского кода.
Если вы предпочитаете GraphQL SDL над клиентом JavaScript, вы также можете выполнить необработанный запрос:
import { executeQuery , gql } from './path/to/mordred/graphql'
const { data , errors } = await executeQuery (
gql `
query($limit: Int!) {
allMarkdown(limit: $limit) {
id
}
}
` ,
{
limit : 20 ,
} ,
) Обратите внимание, что мы используем тег gql здесь только для выделения синтаксиса в поддерживаемых редакторах, таких как VS Code, он совершенно необязательно.
Когда ваш проект имеет глубокую вложенную структуру папок, вы можете столкнуться с адом импорта :
import { client } from '../../mordred/graphql' Чтобы упростить путь импорта, вы можете использовать опцию paths в tsconfig.json :
{
"compilerOptions" : {
"baseUrl" : " . " ,
"paths" : {
"mordred-graphql" : [ " ./mordred/graphql " ]
}
}
} Теперь вы можете импортировать форму mordred-graphql .
Обратите внимание, что Next.js поддерживает paths по умолчанию, но если вы используете другие инструменты, которые не поддерживают это, вы можете найти Alias-HQ полезным.
Вы можете создать API at /api/graphql для изучения данных через Graphiql:
import express from 'express'
import graphqlHTTP from 'express-graphql'
import { schema } from '../../mordred/graphql'
const app = express ( )
app . use (
graphqlHTTP ( {
schema ,
graphiql : true ,
} ) ,
)
export default app MIT © EGOIST (Кевин Титор)