我尝试使用 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;
}
打字稿错误是:
Next.js 错误是:
请问你能帮我吗?
谢谢!!
我阅读了 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;
}
我无法解释你做错了什么,但请尝试降级到
gfm
之前的主要版本。我使用 remark-gfm 的 3.0.1
版本,它可以在我的 Next 应用程序中使用。