Joplin 笔记导入与导出完全指南:从 Evernote 迁移到 JEX 备份的实战方案
【免费下载链接】joplinJoplin - the privacy-focused note taking app with sync capabilities for Windows, macOS, Linux, Android and iOS.项目地址: https://gitcode.com/GitHub_Trending/jo/joplin
本文以 Joplin 官方欢迎文档(readme/welcome/2_importing_and_exporting_notes.md)为核心骨架,系统讲解如何将 Evernote 及其他笔记应用的数据迁入 Joplin,以及如何通过 JEX、Markdown、JSON、PDF 等格式完成笔记导出与备份。读完本文,你将掌握桌面端菜单操作与终端命令行两种导入/导出路径,并能理解背后InteropService导入导出模块的源码级工作原理。
一、导入能力总览:Joplin 支持什么格式
Joplin 的导入能力由InteropService(位于 packages/lib/services/interop/InteropService.ts)统一调度。从该服务的模块注册表(modules()方法,InteropService.ts 第 57-209 行)可以看出,Joplin 内置的导入模块覆盖以下格式:
| 格式 | 文件扩展名 | 导入内容 | 说明 |
|---|---|---|---|
enex | .enex | Evernote 笔记本、笔记、标签、图片、附件与元数据 | 支持"转 Markdown"与"转 HTML"两种模式,可导入单文件或整个目录 |
jex | .jex | Joplin 自身导出的归档文件 | 用于备份恢复与跨设备迁移 |
raw | 目录 | Joplin 原始导出目录 | 每个条目对应一个文件 |
md | .md、.markdown、.txt、.html | Markdown / 文本 / HTML 文件 | 支持文件与目录两种来源 |
md_frontmatter | .md、.markdown、.txt、.html | 带 Front Matter 的 Markdown | 与 Obsidian 等工具生态互通 |
obsidian | .md | Obsidian Vault 目录 | 移动端也支持 |
one | .zip、.one、.onepkg | OneNote 笔记本 | .onepkg仅在 Windows 上可导入 |
这些模块注册信息同时是终端import命令自动补全--format参数的来源。此外,InteropService.registerModule()(InteropService.ts 第 212-215 行)允许第三方插件注册自定义导入/导出模块,这也是 Joplin 插件生态扩展数据互通能力的基础。
二、从 Evernote 导入:ENEX 全量迁移
2.1 ENEX 能带来什么
ENEX 是 Evernote 的导出格式。Joplin 通过 ENEX 文件可以导入完整的 Evernote 笔记本,以及笔记、标签、图片、附件文件和笔记元数据(如作者、地理位置等)。换句话说,一次 ENEX 导入即可完成笔记数据的整体搬迁。
值得注意的是,官方文档(readme/apps/import_export.md)明确指出有三个细节在导入后可能与原笔记略有差异:
- 识别数据(Recognition data):Evernote 图片(尤其是扫描件/拍照文档)附带的 OCR 识别文本不会被保留。但若你在 Joplin 中启用了 OCR 功能,这些识别数据会以 Joplin 兼容的格式重建。
- 颜色、字体大小与字体:Evernote 笔记正文以 HTML 存储,导入时会被转换为 Markdown。对于纯文本或基础排版(加粗、斜体、项目符号、链接等)的笔记,这种转换是无损的;表格也会被转换为 Markdown 表格。但对于非常复杂的笔记,颜色、字号、字体等样式信息可能丢失——正文文本本身始终会被完整导入。如果你必须保留这些额外样式数据,Joplin 也支持将 ENEX 以 HTML 形式导入(即注册表中的
Evernote Export File (as HTML)模块)。 - 笔记间链接:大部分链接可以保留,但 ENEX 格式本身不包含足够的链接目标信息(Evernote 使用内部 ID 关联链接,但该 ID 未与目标笔记绑定)。Joplin 会尝试根据笔记标题猜测链接目标,这在大多数情况下有效,但在"多篇笔记标题相同"或"链接文字与目标笔记标题不一致"时会失败,此时原始 Evernote 链接会原样保留。
2.2 桌面端操作步骤
- 先在 Evernote 中将笔记本导出为 ENEX 文件。
- 打开 Joplin桌面应用,选择菜单File > Import > ENEX,选中你的 ENEX 文件。
- 笔记会被导入到一个新建的独立笔记本中。之后你可以按需将其移动到其他笔记本、重命名笔记本等。
关于单文件与目录两种导入形态,官方导入文档还补充了关键行为:
- 导入单个文件时,Joplin 会创建一个与文件名同名的笔记本,所有笔记都导入其中;
- 导入一个包含多个 ENEX 文件的目录时,Joplin 会为每个文件创建一个笔记本。
2.3 终端命令行操作
在终端应用(CLI)的命令行模式下,使用import命令:
import /path/to/file.enex这会将笔记导入到一个以文件名命名的新笔记本中。同样支持导入包含多个 ENEX 文件的目录。其底层逻辑可在 packages/app-cli/app/command-import.ts 中看到:命令通过InteropService.instance().import()执行,--format未指定时默认为auto,即由InteropService.import()内部的moduleByFileExtension_()(InteropService.ts 第 296-308 行)根据文件扩展名自动匹配导入模块;--output-format md|html用于在"ENEX 转 Markdown"与"ENEX 转 HTML"两种模式间切换。
从源码看,ENEX 导入的完整调用链是:InteropService.import()→newModuleByFormat_()解析出InteropService_Importer_EnexToMd(packages/lib/services/interop/InteropService_Importer_EnexToMd.ts)→importEnex()执行解析并写入数据库。目录导入场景下,还会在全部文件导入完成后调用restoreCrossFolderLinks()与restoreEnexNoteLinks()做跨笔记本的笔记链接修复(依据标题匹配目标笔记),这正对应上文提到的"链接猜测"机制。
三、从其他应用与 Markdown 文件导入
3.1 通用思路
从其他笔记应用迁移到 Joplin 的通用做法是:先将笔记转换为 ENEX(Evernote 格式)、HTML 或 Markdown,再导入 Joplin。官方为此维护了针对具体应用的迁移指南(详见 readme/apps/import_export.md 中引用的社区 wiki 文档)。
3.2 从 Markdown / 文本文件导入
Joplin 可以直接导入 Markdown 文件,既支持单个文件,也支持整个目录。
桌面端:
- 导入单个文件:File > Import >MD - Markdown (file),选中 Markdown 文件,它会导入到当前选中的笔记本;
- 导入整个目录:File > Import >MD - Markdown (directory),选中目录的顶层文件夹。目录结构会按笔记本 > 子笔记本 > 笔记的层级在 Joplin 内原样保留。
终端:
import --format md /path/to/file.md import --format md /path/to/directory/从注册表可见,md模块同样接受.markdown、.txt、.html扩展名,因此 HTML 文档与纯文本文件也能通过同一模块导入(文本文件另有专门的txt模块入口)。Joplin 还额外提供了md_frontmatter(Markdown + Front Matter)与obsidian(Obsidian Vault)两种导入格式,便于与 Obsidian 生态双向互通。
四、导出笔记:JEX 备份与多格式输出
4.1 JEX 格式:面向备份的无损归档
JEX(Joplin Export file)是 Joplin 的核心导出格式,它是一个tar 归档文件,可容纳多篇笔记、多个笔记本等。官方定位它"主要面向备份用途",其关键特性是无损:所有笔记、以及地理位置、更新时间、标签等元数据都会被完整保留,并且可以重新导入 Joplin。
从实现看,JEX 导出器InteropService_Exporter_Jex(packages/lib/services/interop/InteropService_Exporter_Jex.ts)并非独立实现序列化,而是复用 Raw 导出器(InteropService_Exporter_Raw)把数据先写入临时目录,再由tarCreate()打包成.jex文件,因此 JEX 与 Raw 两种格式的数据内容完全同构,区别仅在于前者是压缩打包的文件、后者是散落在目录中的单个文件。
4.2 Raw 格式
Raw(原始)格式与 JEX 内容相同,只是数据直接写入一个目录,每个条目对应一个单独的文件。它便于人类直接查看、用脚本处理,或在需要精细化控制时使用,适合作为 JEX 之外的可读性备份形态。
4.3 其他导出格式
Joplin 还支持导出为多种其他格式,可按单条笔记、整个笔记本或全部内容三个粒度执行:
- Markdown(目录形态,另有 Markdown + Front Matter 变体):便于用任意文本工具阅读与版本管理;
- HTML(单文件或目录):便于浏览器直接查看与分享,此格式仅在桌面端支持;
- JSON与PDF:对应结构化数据交换与打印/分发场景。
这些模块同样注册在InteropService的exportModules列表中(InteropService.ts 第 163-204 行)。
4.4 桌面端与终端操作
桌面端:通过File > Export菜单选择目标格式与范围即可。
终端:使用export命令(packages/app-cli/app/command-export.ts):
# 导出为 JEX(默认格式) export /path/to/backup.jex # 指定导出格式 export --format jex /path/to/backup.jex export --format raw /path/to/backup_dir export --format md /path/to/markdown_dir # 只导出某条笔记或某个笔记本 export --note <note-id> ... export --notebook <notebook-id> ...注意:终端版export命令的--format选项会过滤掉html(源码中会抛出 "HTML export is not supported. Please use the desktop application." 错误),因此HTML 导出请使用桌面应用。默认格式为jex,与桌面端一致。
4.5 导出流程的源码级细节
InteropService.export()(InteropService.ts 第 363-517 行)展示了导出时的完整工作流,理解它有助于你预判备份结果:
- 收集待导出条目:递归枚举文件夹树(
Folder.childrenIds('')),按"文件夹 → 笔记 → 资源 → 标签 → 笔记-标签关联"的顺序入队;通过Note.linkedResourceIds()解析每篇笔记正文引用的附件资源,确保附件不遗漏;可指定sourceFolderIds/sourceNoteIds缩小导出范围。 - 冲突笔记处理:默认不导出冲突笔记,可通过
includeConflicts选项包含(同时会包含冲突文件夹)。 - 加密与异常保护:若条目处于加密状态(
encryption_applied或encryption_blob_encrypted),会跳过并写入警告,提示等待解密后再导出;单个条目处理失败不会中断整体导出,而是记录在result.warnings中。 - 类型分批处理:按固定类型顺序(
TYPE_FOLDER → TYPE_RESOURCE → TYPE_NOTE → TYPE_TAG → TYPE_NOTE_TAG)分批调用导出器的prepareForProcessingItemType/processItem/processResource,并通过onProgress回调报告进度。
因此,导出的.jex文件是一个自包含的完整快照:重新导入时(File > Import > JEX)即可恢复笔记本层级、附件与标签关系,这正是其适合作为备份的根本原因。
五、结语与推荐实践
综合来看,Joplin 的导入导出体系可以归纳为三条实战建议:
- 从 Evernote 迁入:桌面端 File > Import > ENEX,或终端
import,一条命令即可搬入完整笔记本;对样式保留有强需求时可选用 HTML 模式导入。 - 日常备份:定期用JEX格式整体导出(支持笔记本/笔记粒度),它无损且可回导,是官方推荐备份形态;需要可读性时改用 Raw 目录或 Markdown。
- 生态互通:利用 Markdown / Front Matter / Obsidian 导入导出模块,在 Joplin 与其他笔记工具之间自由流转纯文本笔记。
所有导入导出操作背后,均由 packages/lib/services/interop/InteropService.ts 这一可扩展的模块化框架承载,其注册表、自动格式检测与进度回调机制,保证了从图形界面到命令行的一致体验,也为后续新增格式(含插件注册自定义模块)留下了清晰的扩展点。
【免费下载链接】joplinJoplin - the privacy-focused note taking app with sync capabilities for Windows, macOS, Linux, Android and iOS.项目地址: https://gitcode.com/GitHub_Trending/jo/joplin
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考