Node 无法直接执行 .md 文件,因其非 JavaScript 模块;markdownlint-cli2 是轻量可靠的 Markdown 规范化工具,支持自动修正语法(如列表、空行、标题缩进),但不渲染;复杂排版(如 PDF 导出)需用 markdown-pdf 或 pandoc。

为什么不能直接用 node 执行 .md 文件
Markdown 文件不是 JavaScript,node 本身不识别 .md 后缀,直接运行 node README.md 会报错:Error: Cannot find module 'README.md' 或解析失败。Node 只能执行 JS/TS/CJS/ESM 模块,所以必须借助第三方工具把 Markdown 当作“输入数据”来处理,而不是当作可执行代码。
markdownlint-cli2 是最轻量可靠的自动排版入口
VSCode 插件 vscode-markdownlint 背后用的就是 markdownlint-cli2,它支持读取、修正、输出 Markdown 文件——这才是真正意义上的“自动排版”(比如统一列表符号、修复空行、标准化标题缩进等)。它不渲染,只规范化文本结构。
- 安装命令:
npm install -g markdownlint-cli2 - 一键修正当前目录所有
.md文件:markdownlint-cli2 "**/*.md" --fix - 只修正特定文件:
markdownlint-cli2 README.md --fix - 想看改了什么?加
--debug参数,它会输出每条规则的触发和修正细节
注意:--fix 不是万能的,部分规则(如 MD041 首行必须是标题)需人工判断,markdownlint-cli2 默认跳过无法安全自动修复的项。
配合 VSCode 自动触发:用 tasks.json 绑定保存事件
手动敲命令太慢。你可以在项目根目录建 .vscode/tasks.json,让 VSCode 在保存 Markdown 文件时自动调用 markdownlint-cli2 --fix:
使用 markitdown 将文档和文件转换为 Markdown。适用于转换 PDF、Word (.docx)、PowerPoint (.pptx)、Excel (.xlsx, .xls)、HTML、CSV、JSON、XML 等格式。
{
"version": "2.0.0",
"tasks": [
{
"label": "format-md",
"type": "shell",
"command": "markdownlint-cli2 \"${file}\" --fix",
"group": "build",
"presentation": { "echo": false, "reveal": false, "panel": "shared" },
"problemMatcher": []
}
]
}
再在 .vscode/settings.json 中启用保存时运行:
"editor.codeActionsOnSave": {
"source.fixAll.markdownlint": true
}
⚠️ 这里有个关键点:这个配置依赖插件 vscode-markdownlint 已启用,且其内置 LSP 支持 codeActionsOnSave。如果没效果,先确认插件已安装并重启 VSCode。
复杂排版(如 PDF 导出/样式注入)不该走 Node CLI,而该用专用插件
如果你说的“自动排版”是指生成 PDF、插入页眉页脚、套用 CSS 主题——那 markdownlint-cli2 做不了。这类任务属于“渲染+导出”,应交给 markdown-pdf 插件或 pandoc。
-
markdown-pdf的markdown-pdf.outputDirectory和markdown-pdf.styles控制输出路径与样式 - 它底层调用的是 Chromium(Puppeteer),不是 Node 原生模块,所以不能用
node xxx.js直接调;必须通过 VSCode 右键菜单或快捷键触发 - 若硬要命令行批量导出,得用
pandoc:pandoc README.md -o README.pdf --css=style.css,但这需要额外安装 Pandoc,且和 VSCode 编辑体验脱钩
真正容易被忽略的点:所谓“自动排版”在不同语境下指向完全不同机制——规范语法用 markdownlint-cli2,导出成 PDF 用插件或 pandoc,两者混用反而增加调试成本。选哪个,取决于你下一步要拿这个 Markdown 干什么。

















