markdown-it 将md格式转为HTML
esj 模板引擎
创建项目
mkdir blog # 创建项目文件夹
cd blog
npm init -y # 初始化项目
npm install markdown-it ejs fs-extra # 安装依赖(注意网络环境)
项目目录结构
blog/
├── node_modules/ # (自动生成)
├── package.json # (自动生成)
├── index.js # 您的核心逻辑代码
├── source/ # 存放您的 Markdown 文章
│ └── first-post.md
└── templates/ # 存放您的 HTML 模板
└── base.ejs
使用 Java 开发
项目结构
my-project/ <-- 你的项目根目录
├── pom.xml <-- Maven 依赖配置文件
│
├── blog/ <-- 你的本地 Markdown 笔记库(源文件夹)
│ ├── 安全笔记/
│ │ ├── 基础知识.md
│ │ └── 内网安全.md
│ └── 编程/
│ └── Java基础.md
│
├── src/
│ └── main/
│ ├── java/ <-- 存放你的 Java 11 核心代码
│ │ └── com/
│ │ └── renderer/
│ │ ├── Main.java <-- 运行的主入口
│ │ └── FileNode.java <-- 文件树的数据模型类
│ │
│ └── resources/ <-- 存放所有“不对外暴露”的资源和模板
│ ├── template.html <-- 你的三栏布局 HTML 模板文件
│ └── static/ <-- 存放前端公共静态资源(皮肤和脚本)
│ ├── css/
│ │ └── github-markdown.css
│ └── js/
│ └── highlight.min.js
│
└── dist/ <-- 自动生成的静态网站输出目录(打包结果)
├── css/ <-- 运行时由 Java 将 resources/static 复制过来
├── js/
├── 安全笔记/
│ ├── 基础知识.html <-- 最终生成的 HTML 页面
│ └── 内网安全.html
└── 编程/
└── Java基础.html
引入依赖
<!-- Source: https://mvnrepository.com/artifact/com.vladsch.flexmark/flexmark-all -->
<dependency>
<groupId>com.vladsch.flexmark</groupId>
<artifactId>flexmark-all</artifactId>
<version>0.64.8</version>
</dependency>
<!-- Source: https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.15.RELEASE</version>
</dependency>
flexmark 使用
public class MarkdownConverter {
public static void main(String[] args) {
// 1. 创建配置对象(基础配置)
MutableDataSet options = new MutableDataSet();
// 2. 初始化解析器和渲染器
Parser parser = Parser.builder(options).build();
HtmlRenderer renderer = HtmlRenderer.builder(options).build();
// 3. 解析并渲染
String markdown = "# Hello Flexmark\nThis is **bold** text.";
var document = parser.parse(markdown);
String html = renderer.render(document);
System.out.println(html);
// 输出: <h1>Hello Flexmark</h1>\n<p>This is <strong>bold</strong> text.</p>\n
}
}
RootNode (isDirectory=true, name="src-posts")
├── ChildNode1 (isDirectory=true, name="安全笔记")
│ └── ChildNode2 (isDirectory=false, name="内网安全", md5Id="a1b2c3d4", sourcePath=".../内网安全.md")
└── ChildNode3 (isDirectory=true, name="漏洞复现")
└── ChildNode4 (isDirectory=false, name="fastjson漏洞", md5Id="e5f6g7h8", sourcePath=".../fastjson漏洞.md")
!!! note "提示"