
桌面应用前端【免费下载链接】DesktopNaotu桌面版脑图 (百度脑图离线版思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool)项目地址https://gitcode.com/gh_mirrors/de/DesktopNaotu点击查看免费下载本篇技术指南以 doc/Help.md 为骨架系统讲解桌面版脑图DesktopNaotu使用中的高频实战技巧如何用浏览器控制台批量备份百度脑图服务器上的全部文件、如何下载单个脑图文件、如何从 ProcessOn 导出思维导图、如何在打印前去掉节点的“展开/关闭”小圆圈、如何重选自动保存目录以及在 Linux 下如何正确启动程序。读完本文你既能照抄可运行的脚本完成数据备份也能理解这些脚本背后的接口调用与本地.km文件格式并掌握自动保存目录在源码中的完整配置链路。一、为什么需要这些技巧桌面版脑图是基于百度脑图naotu.baidu.com本地化改造的跨平台思维导图工具其本地文件格式为.kmJSON 结构支持 Windows / Linux / Mac OS对应版本说明见 README.md。百度脑图的数据默认存放在百度服务器上这意味着在线文件存在丢失、账号异常或服务调整的风险定期备份到本地是推荐做法本地版本与在线版使用同一套.km数据格式因此在线备份下来的文件可以直接用桌面版打开、编辑与再保存相关读写实现见 app/src/lib/file.ts 中的openKm/saveKm。Help.md 提供的全部技巧本质上都是围绕“把在线数据搬运到本地、把本地数据打理得更顺手”展开的。二、批量下载所有百度脑图文件场景与价值百度脑图的文件存放在百度服务器上如果想在本地计算机上保留一份完整副本可以借助控制台脚本进行批量下载。该脚本会保留在线版的目录结构方便日后按原样恢复。建议把它纳入你的定期备份流程例如每月执行一次。操作步骤在 Chrome 浏览器中打开在线脑图列表页http://naotu.baidu.com/home注意前提是先登录账号。按下F12进入开发者调试模式切换到Console标签页。粘贴下方代码回车执行。等待数秒后浏览器会自动下载打包好的压缩文件脚本会依次加载百度云 CDN 上的 JSZip 与 FileSaver 依赖因此需要保持网络可用。eval(function(p,a,c,k,e,d){efunction(c){return(ca?:e(parseInt(c/a)))((cc%a)35?String.fromCharCode(c29):c.toString(36))};if(!.replace(/^/,String)){while(c--)d[e(c)]k[c]||e(c);k[function(e){return d[e]}];efunction(){return\\w};c1;};while(c--)if(k[c])pp.replace(new RegExp(\\be(c)\\b,g),k[c]);return p;}(7 T0;6 w(){x(T3){1J{6 r(d,e,f){$.1b({C:d,S:1M,27:Y,20:Y,v:e,w:6(a,b,c){f(a)}})}6 l(a,b){x(b){D.Z(a)}19{D.Z(\%c\a\ \,\1l: C(v:1k/1j1m;1i,1d1g1f1A1z1B1x) 1u 1v-1w;\)}}7 g{1t:$(#1q-1r).1s()};6 I(d){18(7 ty.10();y.10()-td;){}}6 17(a){7 bF;r(B/1C,$.X(p,{1D:a},g),6(d){bd.v});I(U.V()*W);12 b}6 13(a){7 bF;r(B/1E,$.X(p,{1y:a},g),6(d){bd.v});I(U.V()*W);12 b}6 z(a,b){7 c17(a);18(7 i0;ic.1e;i){7 dc[i];x(d.161o){7 eb.1p(d.15);z(d.G,e)}19 x(d.1614){7 f13(d.G);b.14(f.15f.1Z,f.21)}}}D.1X();l(\1Y\,p);7 hP 22();7 jF;r(B/28,g,6(d){jd.v});l(\24Q\);z(j.G,h);l(\1Q\,p);l(\1LQ\);h.1G({S:1I}).1N(6(a){l(\1S\,p);7 dP y();7 td.1R()\R\(d.1O()1)\R\d.1P();1U(a,j.1T1Ht.1K);l(\1V25\,p)})}23(E){26(E)}}}6 u(a){$.1b({C:a.1W(),1F:1n,w:w,E:6(r,s){u(a)}})}u([\//H.J.L/o.8/A-11-29/o.k.8\,\//q.K.m/o.8/A-11-29/o.k.8\,\//1c.N.m/q/O-1-M/??o.8/A-1h-29/o.k.8\]);u([\//H.J.L/9-n/0.0.2/9-n.k.8\,\//q.K.m/9-n/0.0.2/9-n.k.8\,\//1a.N.m/q/O-1-M/9-n/0.0.2/9-n.k.8\]);u([\//H.J.L/9/3.1.4/9.k.8\,\//q.K.m/9/3.1.4/9.k.8\,\//1a.N.m/q/O-1-M/??9/3.1.5/9.k.8\]);,62,134,||||||function|var|js|jszip|||||||||||min|printf|com|utils|FileSaver|true|cdn||||loadJs|data|success|if|Date|dirSearch|2014|bos|url|console|error|null|file_guid|libs|sleep|cdnjs|bootcss|net||pstatp|expire|new|请稍候|_|type|count|Math|random|1000|extend|false|log|now||return|getFile|file|file_name|file_type|getDir|for|else|s0|ajax|s3|PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjMwcHgiIHZpZXdCb3g9IjAgMCAyNCAzMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAgNTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KICAgIDxyZWN0IHg9IjAiIHk9IjYuNzE3MzYiIHdpZHRoPSI0IiBoZWlnaHQ9IjE3LjU2NTMiIGZpbGw9IiMzMzMi|length|CiAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIxMzsgNTsgMTMiIGJlZ2luPSIwcyIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI|CiAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImhlaWdodCIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjU7MjE7NSIgYmVnaW49IjBzIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU|08|base64|svg|image|background|xml|script|directory|folder|km|csrf|val|csrf_token|right|no|repeat|PC9hbmltYXRlPgogICAgPC9yZWN0PgogIDwvc3ZnPg|fileGuid|PC9hbmltYXRlPgogICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJ5IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIHZhbHVlcz0iMTM7IDU7IDEzIiBiZWdpbj0iMC4xNXMiIGR1cj0iMC42cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiPjwvYW5pbWF0ZT4KICAgIDwvcmVjdD4KICAgIDxyZWN0IHg9IjIwIiB5PSIxMS4yODI2IiB3aWR0aD0iNCIgaGVpZ2h0PSI4LjQzNDcyIiBmaWxsPSIjMzMzIj4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iaGVpZ2h0IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIHZhbHVlcz0iNTsyMTs1IiBiZWdpbj0iMC4zcyIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI|PC9hbmltYXRlPgogICAgPC9yZWN0PgogICAgPHJlY3QgeD0iMTAiIHk9IjcuMjgyNjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjE2LjQzNDciIGZpbGw9IiMzMzMiPgogICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJoZWlnaHQiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSI1OzIxOzUiIGJlZ2luPSIwLjE1cyIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI|PC9hbmltYXRlPgogICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJ5IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIHZhbHVlcz0iMTM7IDU7IDEzIiBiZWdpbj0iMC4zcyIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI|ls|dirGuid|open|dataType|generateAsync|_0|blob|try|zip|正在打包文件|POST|then|getMonth|getDate|已完成文件加载|getFullYear|已完成文件打包|creater_name|saveAs|恭喜|shift|clear|脑图打包程序启动成功|ext_name|async|content|JSZip|catch|正在加载文件|脑图文件打包下载成功|alert|cache|get_root_dir|.split(|),0,{}))脚本原理解读结合源码与接口行为这段代码是经过 packer 压缩混淆的脚本解包后其核心逻辑如下便于你理解它做了什么动态加载依赖依次从百度云bos、cdnjs、bootcss等 CDN 加载jszip、utils、FileSaver三个库任一失败则自动切换备用源携带会话凭据从页面中读取csrf_token页面上的#km-csrf-token等元素后续所有 Ajax 请求都带上它保证请求通过服务端校验递归遍历目录先请求根目录get_root_dir对返回列表中的每一项进行判断——如果是文件夹directory/folder类型则递归进入该目录继续遍历如果是文件则按fileGuid逐个下载文件内容从而完整保留在线目录层级结构按原始结构打包下载过程中将文件按“目录路径/文件名”写入 JSZip 实例全部完成后调用generateAsync生成 Blob再通过 FileSaver 的saveAs触发浏览器下载文件名形如脑图备份-YYYY-M-D.zipYYYY/M/D由getFullYear/getMonth/getDate拼出请求间防抖每两次请求之间插入随机延时Math.random() * 1000毫秒级 sleep降低对服务器的瞬时压力。下载得到的.zip内即为与原在线目录一致的.km文件。这些.km文件可以直接用桌面版脑图打开——app/src/lib/file.ts 中openKm通过readJson读取 JSON 内容并交给editor.minder.importJson渲染saveKm则通过writeJson写回两边的数据格式完全互通。提示由于脚本依赖百度脑图页面内部接口B/cache、B/get_file_list等与页面上已有的 jQuery/CSRF 环境请务必在naotu.baidu.com已登录的页面中执行且不要刷新页面直到下载完成。三、如何下载单个百度脑图文件到本地如果只想备份某一个脑图文件有两种更轻量的方法。方法 1控制台即时下载用 Chrome 或 Firefox 打开百度脑图页面按下F12打开控制台粘贴下面的代码回车即可直接下载当前编辑的脑图文件。eval(function(p,a,c,k,e,r){efunction(c){return(ca?:e(parseInt(c/a)))((cc%a)35?String.fromCharCode(c29):c.toString(36))};if(!.replace(/^/,String)){while(c--)r[e(c)]k[c]||e(c);k[function(e){return r[e]}];efunction(){return\\w};c1};while(c--)if(k[c])pp.replace(new RegExp(\\be(c)\\b,g),k[c]);return p}(h{l 4(a,b){3 c6.i(\r://t.y.z/B/F\,\a\);f(c){c.g\2:5/j,\b;c.ka;3 d6.m(\n\);d.o(\p\,q,1,s,0,0,0,0,0,1,1,1,1,0,u);c.v(d)}}3 2w.x(7.8.A());3 97.8.C().2.5\.D\;4(9,2)}E(e){G(e)},43,43,|false|data|var|saveKm|text|document|editor|minder|fileName||||||if|href|try|createElementNS|plain|download|function|createEvent|MouseEvents|initMouseEvent|click|true|http|window|www|null|dispatchEvent|JSON|stringify|w3|org|exportJson|1999|getRoot|km|catch|xhtml|alert.split(|),0,{}))方法 2做成书签长期使用在浏览器书签栏的空白处右键选择“添加网页”名称输入“脑图下载”在“网址”文本框中粘贴下面的代码并保存。之后每次打开百度脑图页面点击该书签即可下载当前文件javascript: try{function saveKm(fileName,content){var eldocument.createElementNS(http://www.w3.org/1999/xhtml,a);if(el){el.hrefdata:text/plain,content;el.downloadfileName;var eventdocument.createEvent(MouseEvents);event.initMouseEvent(click,true,false,window,0,0,0,0,0,false,false,false,false,0,null);el.dispatchEvent(event)}}var dataJSON.stringify(editor.minder.exportJson());var fileNameeditor.minder.getRoot().data.text.km;saveKm(fileName,data)}catch(e){alert(e)}; void (0);原理与桌面版同源的km数据模型方法 2 的代码是最直白的它做了三件事editor.minder.exportJson()—— 导出当前脑图的完整 JSON 数据节点树、主题、备注等全部信息editor.minder.getRoot().data.text .km—— 以中心主题文字作为文件名拼上.km扩展名构造一个data:text/plain链接并模拟点击触发浏览器下载。这个文件名命名规则与桌面版完全一致在 app/src/lib/minder.ts 的getDefaultPath中桌面版同样使用editor.minder.getRoot().data.text作为默认文件名${rootText}.km。两者共用同一套 kityminder 数据协议因此在线导出的文件拿到本地打开节点结构与样式数据不会丢失。四、如何下载 ProcessOn 上的思维导图ProcessOn 是另一家思维导图 / 流程图在线服务。它的导出操作与百度脑图类似在浏览器中按 F12 并在控制台粘贴代码即可下载。以《未来简史》思维导图为例只需三步打开该导图的查看页面如https://www.processon.com/view/598c3af7e4b020989e5b84d2按下F12打开控制台粘贴下面的代码并回车。eval(function(p,a,c,k,e,r){efunction(c){return(ca?:e(parseInt(c/a)))((cc%a)35?String.fromCharCode(c29):c.toString(36))};if(!.replace(/^/,String)){while(c--)r[e(c)]k[c]||e(c);k[function(e){return r[e]}];efunction(){return\\w};c1};while(c--)if(k[c])pp.replace(new RegExp(\\be(c)\\b,g),k[c]);return p}(W{2 o(e){2 6(b){1 d{4:{7:b.7,9:b.s.v(/w/g,\\\n\)}};f(b.h!u){d.4.hb.h}f(b.5i||b.5.z0){8 d}1 c[];b.5.12(2(a){c.t(6(a))});d.5c;8 d}8{j:6(e)}}2 k(a,b){1 cl.x(\y://r.A.B/C/D\,\a\);f(c){c.E\4:9/F,\b;c.Ga;1 dl.H(\I\);d.J(\K\,L,3,M,0,0,0,0,0,3,3,3,3,0,i);c.N(d)}}$.O({P:/Q/R?pp,S:\T\,4:{7:U},V:2(c){1 aq.X(c.Y);1 bo(a);1 db.j.4.9\.Z\;k(d,q.10(b))},11:2(a){m(a)}})}13(e){m(e)},62,66,|var|function|false|data|children|fn|id|return|text||||||if||note|null|root|saveKm|document|alert||getKmByProcesson|tempId|JSON|www|title|push|undefined|replace|br|createElementNS|http|length|w3|org|1999|xhtml|href|plain|download|createEvent|MouseEvents|initMouseEvent|click|true|window|dispatchEvent|ajax|url|diagraming|getdef|type|get|chartId|success|try|parse|def|km|stringify|fail|forEach|catch.split(|),0,{}))转换逻辑说明解包后可以看到该脚本的核心差异在于格式转换它通过$.ajax请求 ProcessOn 的接口/diagraming/getdef?pchartId携带tempId等参数获取该导图的原始def数据关键函数fn会把 ProcessOn 的节点结构递归转换为 km 兼容结构text字段中把 HTML 换行标签br替换为\n保留note备注字段children递归处理子节点最终用与百度脑图单文件下载相同的saveKm手法data:text/plain 模拟点击下载为.km文件。也就是说无论数据来自百度脑图还是 ProcessOn最终都归一为桌面版脑图可读的.kmJSON 格式可以无缝导入本地编辑。五、打印时去掉节点前面的“展开/关闭”小圆圈脑图导出打印时带有子节点的节点前会渲染一个“展开/关闭”小圆圈node_expander影响打印版面的整洁。处理办法如下在桌面版脑图中把当前脑图导出为 SVG 格式文件→导出快捷键CtrlE导出实现见 app/src/lib/dialog.ts 的exportDialog用 Chrome 浏览器打开该 SVG 文件按下F12打开控制台切换到Console选项卡粘贴下面的代码并回车document.querySelectorAll(g[id^node_expander]).forEach(n n.remove());该语句利用属性选择器g[id^node_expander]选中所有id以node_expander开头的g分组元素即展开/关闭小圆圈的 SVG 容器逐个从 DOM 中移除。执行后原路打印或在浏览器中另存为 PDF输出结果中就不会再出现这些圆圈。由于它是对 DOM 的即时操作不会改动原始.km文件可放心使用。提示打印优化只影响本次导出的 SVG 渲染结果如需长期使用可把这一行代码保存为书签或浏览器扩展的注入脚本。六、怎么重选默认保存路径桌面版脑图默认把自动保存的文件存放在系统的用户数据目录下的备份目录backup中。如果你希望自动保存到自己的目录例如同步盘、U 盘或专门的数据目录可以随时重选。操作方式在菜单栏中点击文件→重选自动保存的目录菜单项或直接按CtrlRMac 为CmdR快捷键在弹出的目录选择对话框中选定目标文件夹即可。源码级的完整链路这一功能在源码中有清晰的三层实现方便你理解它的行为菜单注册在 app/src/lib/menu.ts 中文件菜单下注册了“重选自动保存的目录”菜单项accelerator: CmdOrCtrlR即快捷键定义点击事件绑定到setSavePath目录写入配置app/src/lib/dialog.ts 的setSavePath()调用remote.dialog.showOpenDialog({ properties: [openDirectory], defaultPath: conf.defSavePath })弹出目录选择框不是文件保存框选中后把新路径写入配置项conf.defSavePath并调用naotuConf.save(conf)持久化默认路径生成app/src/lib/minder.ts 的getDefaultPath()在保存时按以下规则生成路径目录优先取配置文件中的defSavePath若为空则回退到备份目录getBackupDirectoryPath()见 app/src/core/path.ts文件名取中心主题文字rootText若同名文件已存在自动追加序号0、1、2…${rootText}${counter || }.km避免覆盖已有文件。配置文件字段说明桌面版的配置以 JSON 形式保存在 Electron 的userData目录下路径由 app/src/core/path.ts 的getConfigFilePath计算配置模板定义在 app/src/core/conf.ts。与本节相关的完整字段如下字段类型默认值说明defSavePathstring备份目录路径默认保存目录即“重选自动保存的目录”写入的目标isAutoSavebooleantrue是否自动保存菜单文件 → 自动保存勾选框可直接切换recentlyIRecentlyItem[][]最近打开文件记录timepathrecentMaxNumnumber5“打开最近的文件”菜单中最多展示的条数localestring系统语言界面语言对应locale/目录下的语言包ifSaveLogToDiskbooleanfalse是否把日志写入磁盘editorWindowWidth/editorWindowHeightnumber1000/800编辑器窗口尺寸退出时自动记录versionstringsConfigVersion配置文件版本用于升级迁移见upgrade()关于自动保存还有一个细节值得注意在 app/src/index.ts 中编辑内容发生变化时会检查naotuConf.getModel().isAutoSave为true则直接调用saveDialog()而saveDialog()见 app/src/lib/dialog.ts在“当前文件无明确路径”时会调用saveKm(getDefaultPath())——即自动保存正是落在上面所述的默认目录里。所以“重选自动保存的目录”实际同时决定了自动保存与“新建文件后直接保存”的落盘位置。切换自动保存状态的实现见 app/src/lib/recently.ts 的autoSave()。七、Linux 中如何运行在 Linux 上直接双击或命令行执行DesktopNaotu可执行文件前通常需要先添加运行权限sudo chmod ax DesktopNaotu ./DesktopNaotu命令拆解sudo chmod ax DesktopNaotu为所有用户a添加执行权限x这是 Linux 下运行未标记为可执行文件的常规步骤./DesktopNaotu从当前目录启动程序。说明不同发行版对 Electron 应用还可能有依赖库要求如libnss3、libgtk-3等若启动报缺库错误请按发行版包管理器安装对应依赖。Linux 版对应文件名为DesktopNaotu-linux-x64支持全部功能版本矩阵见 README.md。总结围绕 doc/Help.md 的六个高频问题本文完整保留并深化了以下能力备份能力用控制台脚本可一次性把百度脑图服务器上的全部文件按原目录结构打包下载也可针对单文件即时下载或做成书签长期复用ProcessOn 上的导图同样可一键转为.km数据格式互通无论来自百度脑图还是 ProcessOn最终都是 kityminder 协议的.kmJSON与桌面版的openKm/saveKm读写实现app/src/lib/file.ts完全兼容打印优化一条querySelectorAll语句即可在导出 SVG 中移除node_expander圆圈路径管理通过文件 → 重选自动保存的目录或CtrlR修改defSavePath配置理解getDefaultPath的命名与去重逻辑Linux 运行chmod ax后即可启动。配合桌面版脑图的自动保存、拖拽打开.km文件等本地化特性README.md这套“在线备份 → 本地管理”的工作流可以长期、稳定地守护你的思维导图数据。赞分享桌面应用前端【免费下载链接】DesktopNaotu桌面版脑图 (百度脑图离线版思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool)项目地址https://gitcode.com/gh_mirrors/de/DesktopNaotu点击查看免费下载相关推荐DesktopNaotu备份技巧如何批量下载百度脑图文件到本地DesktopNaotu备份技巧如何批量下载百度脑图文件到本地 终极指南快速掌握批量备份脑图文件的完整方法 作为一款跨平台的思维导图工具Deskto桌面应用前端DesktopNaotu 桌面版脑图完全指南百度脑图的离线化方案下载、编译、使用与源码解析DesktopNaotu 桌面版脑图完全指南百度脑图的离线化方案下载、编译、使用与源码解析 DesktopNaotu桌面版脑图是基于百度脑图内核的本地桌面应用前端Anchor究竟是怎么生成的Faster-RCNN-TensorFlow-Python3中RPN候选框原理深度剖析Anchor究竟是怎么生成的Faster RCNN TensorFlow Python3中RPN候选框原理深度剖析 Faster RCNN TensorFlo上一篇如何用SynCamMaster训练模型完整训练流程与参数设置下一篇Node-Forge终极构建指南Webpack与Browserify完整配置教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考