使用 gfm 扩展将 markdown 转换为 mdast 树不起作用(无法设置未定义的属性(设置 'inTable'))

问题描述 投票:0回答:1

我尝试使用 Next.js 13 中的 gfm 扩展将 .md 文件转换为 mdast 树(JSON),并且在 VSC 和 Next.js 中收到 Typescript“无法设置未定义的属性(设置 'inTable')”错误在浏览器中。

代码是下一个:

"use server"
import fs from 'fs';
import path from 'path';
import matter from 'gray-matter';
import { fromMarkdown } from "mdast-util-from-markdown"
import { gfm } from 'micromark-extension-gfm'
import { gfmFromMarkdown, gfmToMarkdown } from 'mdast-util-gfm'

const postsDirectory = path.join(process.cwd(), 'blogposts');

export async function getPostDataToEdit (id: string) {
  const fullPath = path.join(postsDirectory, `${id}.md`);
  const fileContents = fs.readFileSync(fullPath, 'utf8');
  const matterResult = matter(fileContents);

  const tree = fromMarkdown(fileContents,'utf8' , {
    extensions: [gfm()],
    mdastExtensions: [ gfmFromMarkdown() ]
  })

  const blogPost: BlogPost & {  body: any } = {
    id,
    title: matterResult.data.title,
    date: matterResult.data.date,
    published: matterResult.data.published ? "Published" : "Draft",
    body: tree,
  }

  return blogPost;
}

打字稿错误是:

typescript error

Next.js 错误是:

Next.js error

请问你能帮我吗?

谢谢!!

我阅读了 mdast-util-from-markdown 和 mdast-util-gfm 的文档,但无法解决这个问题。如果我从函数“fromMarkdown”中删除扩展部分,效果就很好,但没有识别文件上的 gfm markdown,只是常见的 markdown。

没有扩展部分的代码:

"use server"
import fs from 'fs';
import path from 'path';
import matter from 'gray-matter';
import { fromMarkdown } from "mdast-util-from-markdown"
import { gfm } from 'micromark-extension-gfm'
import { gfmFromMarkdown, gfmToMarkdown } from 'mdast-util-gfm'

const postsDirectory = path.join(process.cwd(), 'blogposts');

export async function getPostDataToEdit (id: string) {
  const fullPath = path.join(postsDirectory, `${id}.md`);
  const fileContents = fs.readFileSync(fullPath, 'utf8');
  const matterResult = matter(fileContents);

  const tree = fromMarkdown(fileContents,'utf8' , {
  })

  const blogPost: BlogPost & {  body: any } = {
    id,
    title: matterResult.data.title,
    date: matterResult.data.date,
    published: matterResult.data.published ? "Published" : "Draft",
    body: tree,
  }

  return blogPost;
}
markdown github-flavored-markdown
1个回答
0
投票

我无法解释你做错了什么,但请尝试降级到

gfm
之前的主要版本。我使用 remark-gfm 的
3.0.1
版本,它可以在我的 Next 应用程序中使用。

© www.soinside.com 2019 - 2024. All rights reserved.