#graphql #markdown #gatsby #netlify
#graphql #markdown #gatsby #netlify
Вопрос:
У меня возникли проблемы с полем даты и времени в gatsby.
Первоначально я просто использовал строковый виджет в netlify cms, но markdown, похоже, не мог решить, что такое число и что такое строка:
Это означает, что gatsby видит конфликтующие типы полей:
warn There are conflicting field types in your data.
MarkdownRemark.frontmatter.startTime:
- type: number
value: 1080
- type: string
value: '07:00'
MarkdownRemark.frontmatter.endTime:
- type: number
value: 1140
- type: string
value: '08:00'
Поэтому я явно определяю их с createTypes
помощью действия в соответствии с предложением gatsby:
schema.buildObjectType({
name: 'Frontmatter',
fields: {
startTime: {
type: 'Date',
// resolve(parent){
// console.log(parent.startTime);
// },
extensions: {
dateformat: {
formatString: "HH:mm",
},
},
},
endTime: {
type: 'Date',
extensions: {
dateformat: {
formatString: "HH:mm",
},
}
},
},
}),
Но это приводит либо к 00:00
"Invalid date"
Я использую netlify timepicker для установки значений:
- { label: "Start Time", name: startTime, widget: datetime, date_format: false, time_format: HH:mm, format: HH:mm}
- { label: "End Time", name: endTime, widget: datetime, date_format: false, time_format: HH:mm, format: HH:mm}
Есть ли способ заставить markdown видеть строки вместо чисел? Или чтобы увидеть дату и время? Или заставить netlify cms всегда сохранять его в виде строки?
Ответ №1:
У меня также была эта проблема, и я обнаружил, что версия синтаксического анализатора YAML, используемого Gatsby (в настоящее js-yaml@3.14.1
время), анализирует строки как base60, где это возможно. Который, я считаю, не соответствует спецификации YAML 1.2.
С тех пор эта проблема была исправлена в версии 4, но, к сожалению, библиотеки, которые использует Gatsby, все еще зависят от версии 3. gatsby-transformer-remark@4.3.0 -> gray-matter@4.0.3 -> js-yaml@3.14.1
Попытка принудительного обновления с использованием npm-force-resolutions
не сработала, но, к счастью, серое вещество позволяет менять движки с помощью опций. Также gatsby-transformer-remark позволяет настраивать параметры серого вещества внутри gatsby-config.js .
Итак, мне удалось обойти проблему, установив js-yaml@4.1.0 и переопределение двигателя вот так:
package.json
{
...
"dependencies": {
"js-yaml": "4.1.0",
gatsby-config.js
const yaml = require('js-yaml');
...
{
resolve: "gatsby-transformer-remark",
options: {
engines: {
yaml: {
parse: yaml.load.bind(yaml),
stringify: yaml.dump.bind(yaml)
}
},