Node.js - 如何读取/写入 Markdown 文件并更改其前文元数据?

Jon*_*han 9 javascript markdown node.js

我有几百个 Markdown 文件,我想循环遍历它们并将新数据添加到它们的前端元数据中。

例如,我的文件现在是这样的:

---
title: My title here
---


Markdown content here
Run Code Online (Sandbox Code Playgroud)

我想给它们添加一个id属性:

---
title: My title here
id: 1982n1x23981u1
---


Markdown content
Run Code Online (Sandbox Code Playgroud)

在 Node 中最简洁的方法是什么?我找到了一些处理 markdown 的包,但它们都旨在将其转换为 JSON。

提前致谢!

Rou*_*dre 13

这是我用来更新 Markdown 脚本中所有笔记的 frontmatter 的基本脚本:

// @ts-check
const { readdir, readFile, writeFile } = require("fs/promises");
const matter = require("gray-matter");
const { stringify } = require("yaml");

const directory = "<YOUR-DIRECTORY>";

async function updateFrontMatter(filename) {
  const filepath = `${directory}/${filename}`;

  const { data: frontMatter, content } = matter(await readFile(filepath));

  // remove desc attribute
  if (frontMatter.desc === "") {
    delete frontMatter["desc"];
  }

  // parse created date attribute and convert it as timestamp
  if (typeof frontMatter.created === "string") {
    frontMatter.created = new Date(frontMatter.created).getTime();
  }

  const newContent = `---\n${stringify(frontMatter)}---\n${content}`;

  await writeFile(filepath, newContent);

  console.log(`- [x] ${filepath}`);
}

async function main() {
  const filenames = await readdir(directory);
  const markdownFilenames = filenames.filter((f) => f.endsWith(".md"));

  await Promise.all(markdownFilenames.map(updateFrontMatter));
}

main().catch(console.error);
Run Code Online (Sandbox Code Playgroud)