springrain | 公众号: 及时春雨632 downloadsMake Flomo Memos to Obsidian Notes
Version 2.6.0 - 增强版分支,源自 jia6y/flomo-to-obsidian,包含重大改进
问题背景:
require 函数module.paths 修改完全失效node_modules/playwright,报错 Cannot find module 'playwright'解决方案:
get-to-obsidian 项目的黑客级方案lib/flomo/moduleLoader.ts)支持的安装路径:
E:\GitHub\flomo-to-obsidian\node_modules\playwright{Vault}/.obsidian/plugins/flomo-importer/node_modules\playwright%APPDATA%\npm\node_modules\playwright/usr/local/lib/node_modules/playwright/usr/local/lib/node_modules/playwright/opt/homebrew/lib/node_modules/playwrightNODE_PATH 指定的路径技术亮点:
define 注入开发路径调试支持:
// 在 lib/flomo/moduleLoader.ts 中设置
const DEBUG_MODULE_LOADER = true; // 查看所有尝试的路径
方式一:项目本地安装(推荐)
npm install
npx [email protected] install
方式二:全局安装(现已支持)
npm install -g [email protected]
npx playwright install
方式三:使用部署脚本
npm run build
./deploy.sh # 自动复制 playwright 到插件目录
重大架构升级:本版本在保留传统 Playwright/ZIP 导入的同时,新增基于 Flomo 私有 API 的极速同步能力,实现真正的双通道读写架构。
通道一:传统 Playwright/ZIP 物理导入(兜底)
通道二:API 极速增量同步(主力) ⭐
核心特性:
slug 主键 + updated_at 时间戳通道一:Bearer Token 私有接口推送(免费用户可用)
通道二:Pro 会员 Webhook 推送(官方接口) ⭐
content_type: "markdown" 格式通道三:URL Scheme 降级(移动端)
交互方式:
桌面端:
<webview> 渲染 Flomo 登录页localStorage 提取 Bearer Token移动端降级:
兜底入口:
问题背景:
require 函数module.paths 修改完全失效node_modules/playwright,报错 Cannot find module 'playwright'解决方案:
get-to-obsidian 项目的黑客级方案lib/flomo/moduleLoader.ts)支持的安装路径:
E:\GitHub\flomo-to-obsidian\node_modules\playwright{Vault}/.obsidian/plugins/flomo-importer/node_modules\playwright%APPDATA%\npm\node_modules\playwright/usr/local/lib/node_modules/playwright/usr/local/lib/node_modules/playwright/opt/homebrew/lib/node_modules/playwrightNODE_PATH 指定的路径技术亮点:
define 注入开发路径调试支持:
// 在 lib/flomo/moduleLoader.ts 中设置
const DEBUG_MODULE_LOADER = true; // 查看所有尝试的路径
#工作 #重要)flomo picture/file/2025-11-03/4852/filename.m4a ❌flomo attachment/2025-11-03/filename.m4a ✅启动时自动同步 & 每小时自动同步 & 手动同步Flomo Canvas(包含内容 | 文件链接)Flomo Moments此插件提供多种方式在 Obsidian 中导入和管理您的 Flomo 笔记:
flomo_backup.zip),然后在插件 UI 中选择 zip 文件进行导入核心功能。插件智能识别并仅导入自上次同步以来的新笔记,防止重复。它会记住哪些笔记已被导入。
在 Obsidian vault 中指定导入 Flomo 笔记的目标文件夹(Flomo Target)和单个笔记的子文件夹(Memo Target)。
正确将 Flomo 的 <mark> 标签转换为 Obsidian 的 ==高亮== 语法。
Flomo Moments.md 文件,嵌入所有导入笔记文件的链接,提供按时间顺序的概览[[wiki-links]]--- 分隔项目组织如下:
esbuild.config.mjs # esbuild 的构建配置(将 TS 编译为 JS)
main.ts # 插件入口点:加载设置、添加命令/图标、初始化 UI 和自动同步
manifest.json # 插件元数据(名称、版本、作者等)
package.json # 项目依赖和 npm 脚本(build、dev、version)
styles.css # 插件 UI 的自定义 CSS 样式
versions.json # 版本历史(由 BRAT 使用)
lib/ # 核心逻辑目录
flomo/ # Flomo 特定功能
auth.ts # 处理认证逻辑(可能使用 Playwright)
const.ts # 定义常量(如缓存路径、文件名)
core.ts # 核心数据处理:解析 HTML、识别笔记、生成增量同步的 ID
exporter.ts # 处理从 Flomo 导出数据(使用 Playwright)
importer.ts # 处理导入数据到 Obsidian:读取文件、使用 FlomoCore、写入笔记
moduleLoader.ts # 统一模块加载器(v2.5 新增)
obIntegration/ # Obsidian 特定集成
canvas.ts # 生成 Flomo Canvas 文件的逻辑
moments.ts # 生成 Flomo Moments 文件的逻辑
ui/ # 用户界面组件
auth_ui.ts # Flomo 认证的 UI 模态框
common.ts # 共享的 UI 辅助函数或组件
main_ui.ts # 主插件设置和操作 UI 模态框
manualsync_ui.ts# 手动 zip 文件导入的 UI 部分/模态框
message_ui.ts # 显示消息/通知的 UI 组件
node_modules/ # 已安装的 npm 依赖
了解同步如何工作,特别是增量同步:
触发: 同步可以自动触发(启动时、每小时定时器通过 main.ts)或手动触发(在 main_ui.ts 中点击"立即同步"或使用"立即同步 Flomo"命令)
导出(自动同步/立即同步按钮):
FlomoExporter 利用 Playwright(浏览器自动化工具)来:const.ts 中定义的位置,例如 DOWNLOAD_FILE)导入入口点:
FlomoImporter 类importFlomoFile 方法,传递下载的 HTML 文件路径(DOWNLOAD_FILE)数据读取与解析:
FlomoImporter 读取 HTML 文件内容FlomoCore 的构造函数,传递 HTML 数据和从插件保存的设置加载的已同步笔记 ID 列表(this.settings.syncedMemoIds)核心处理与增量识别(FlomoCore):
loadMemos 方法遍历每个笔记元素(<div class="memo">)memoId。此 ID 基于以下组合:memoId 与从设置接收的 syncedMemoIds 列表进行比较memoId 被添加到实例的 syncedMemoIds 列表中,newMemosCount 递增,笔记的数据被添加到 memos 数组以进行处理写入 Obsidian(FlomoImporter.importFlomoFile):
FlomoCore 接收处理后的数据,包括仅新识别的笔记列表Flomo Target 和 Memo Target 文件夹内的适当文件路径generateMoments 和 generateCanvas状态保存(main.ts):
importFlomoFile 完成后,插件调用 saveSettings()syncedMemoIds 列表(现在包括新导入笔记的 ID)和当前的 lastSyncTime 保存回 Obsidian 的此插件的持久存储中。这确保下一次同步知道这些新添加的笔记通知: 显示一个通知,指示找到了多少笔记以及新导入了多少笔记
这个详细的 ID 生成和检查过程是可靠增量同步的关键,确保只有新内容被添加到您的 Obsidian vault。
npm installnpx [email protected] install如果需要修改导入的笔记格式或模板:
lib/flomo/importer.ts - 负责将 Flomo 笔记转换为 Obsidian 格式lib/obIntegration/moments.ts - 修改 Moments 功能的显示方式lib/obIntegration/canvas.ts - 修改 Canvas 展示格式lib/ui/ 目录下styles.css 文件中进行npm run devnpm run buildmain.jsnpm run versionmanifest.json 和 versions.json 中定义# 编辑 deploy.sh 中的 VAULT_PATH
./deploy.sh
npx [email protected] install安装 Flomo Importer 并启用它
使用命令 Open Flomo Importer,或使用 Import Button
点击"Auto Sync"
如果是首次同步或当前登录已过期,需要进行身份验证
导出与导入
进入 账户详情
选择 导出全部(HTML 格式)
点击 开始导出
选择 flomo.zip 进行导入。Flomo & Memo Home 是存储笔记的位置
导入完成时会弹出通知
查看 Flomo Moments 和 Flomo Canvas 🌅
如果您从旧版本升级,附件路径结构已更改。您有两个选项:
[Flomo Home]/memos/(例如 flomo/memos/ 或 10 flomo/memos/)[Flomo Home]/flomo picture/(如果存在)注意: 内容更新检测自动工作。如果您在升级后在 Flomo 中编辑笔记,它将被检测并重新导入。
2.6.0 版本引入了全新的选项卡式设置界面,包含以下主要分类:
如果遇到 Cannot find module 'playwright' 错误:
检查安装:
# 项目本地
npm list playwright
# 全局
npm list -g playwright
查看搜索路径:
lib/flomo/moduleLoader.ts 中设置 DEBUG_MODULE_LOADER = truenpm run build推荐解决方案:
# 方案一:项目本地安装
cd /path/to/flomo-to-obsidian
npm install
npx playwright install
# 方案二:使用部署脚本
./deploy.sh # 自动复制到插件目录
# 方案三:全局安装(现已支持)
npm install -g [email protected]
npx playwright install
obsidian.normalizePath() 归一化Flomo Target 设置是否正确此项目基于 jia6y/flomo-to-obsidian 进行了重大增强。
特别感谢:
MIT License - 详见 LICENSE 文件
欢迎提交 Issue 和 Pull Request!
English Version | 中文版本