gatsby-transformer-remark的自定义YAML类型

时间:2019-09-16 15:27:54

标签: yaml gatsby

我正在使用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的地方。

1 个答案:

答案 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: [
          ...
        ],
      },
    },
  ]
}