我的笔记

使用 Node.js 进行开发

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 "提示"