我正在使用Gatsby,并使用gatsby-transformer-remark
插件通过graphQL将数据加载到我的页面中。而且我想对Markdown前端存储的某些数据执行自定义字符串操作。
我认为使用自定义YAML类型将是一种很好的方法,因为这可以在编译时完成,并且不需要在运行时进行。 (我相信插件会在编译时运行以生成数据吗?)例如,我可以定义一个名为max
的自定义类型,该类型返回给定数组中的最大数目,并按如下所示直接在markdown文件中使用它:
---
foo: !max
- 2
- 4
- 5
---
是否可以为gatsby-transformer-remark
解析的前题定义自定义YAML类型?还是有其他更好的方法来处理这种情况?
我可以看到gatsby插件使用grey-matter
来解析前端问题,而插件使用js-yaml
来解析YAML。我知道可以在js-yaml
中定义自定义YAML类型。但是,我似乎找不到如何将选项传递给js-yaml
的地方。
答案 0 :(得分:2)
如果您要将选项传递给js-yaml
,则必须定义一个自定义的Yaml引擎,然后通过gray-matter
的选项将其传递给gatsby-transformer-remark
。
定义自定义Yaml引擎:
const yaml = require('js-yaml');
const schema = require('./custom-schema');
const customYamlEngine = (str) => yaml.safeLoad(str, { schema });
module.exports = customYamlEngine
然后将其传递到gatsby-transformer-remark
const yaml = require('./custom-yaml');
module.exports = {
plugins: [
{
resolve: `gatsby-transformer-remark`,
options: {
+ engines: { yaml },
plugins: [
...
],
},
},
]
}