- 知识管理
- 知识库
【免费下载链接】dendron
The personal knowledge management (PKM) tool that grows as you do!
导读
本文以仓库中随插件打包的官方欢迎笔记 dendron.welcome.md 为主线,拆解 Dendron——一个基于灵活层级(flexible hierarchies)的个人知识管理(PKM)工具——的核心理念、首次启动引导流程,以及 "Initialize Workspace" 命令背后的完整源码调用链。读完本文,你将理解欢迎页面如何渲染、教程工作区如何被创建与填充,并掌握从命令面板启动 Dendron 工作区的完整路径。
欢迎笔记在 Dendron 中的角色
dendron.welcome.md并不是一篇独立的帮助文档,而是被真实打包进插件扩展资产目录的笔记,位于:
- packages/plugin-core/assets/dendron-ws/vault/dendron.welcome.md
它与其他初始化笔记(root.md、dendron.md)一起构成了dendron-ws/vault/模板库,是插件安装后首次启动、以及“教程工作区”的种子内容来源。
该笔记的 frontmatter 揭示了它在笔记体系中的特殊地位:
--- id: 05774b2e-ebf7-4bbc-8171-ad191ba0ae0a title: Dendron desc: '' updated: 1598457956604 created: 1598457956604 stub: false nav_exclude: true ---id:笔记的唯一 UUID,Dendron 通过它建立稳定的引用关系;title: Dendron:笔记标题,会被树视图、图视图等消费;stub: false:说明这不是占位桩笔记,而是有真实内容的完整笔记;nav_exclude: true:重要——该笔记在发布网站导航中被排除,它只面向首次进入 VS Code 的用户,不作为站点导航项出现。
核心理念:Hierarchy-First(层级优先)的知识管理
欢迎笔记开篇即点明 Dendron 的设计定位:帮助人们组织并理解“任意体量”的信息,其手段是让“添加、编辑、结构化知识”变得简单,通过灵活的层级完成。Dendron 将这种方式称为hierarchy first approach(层级优先的知识管理方法)。
从仓库结构可以印证这一理念的落地方式:Dendron 的笔记名使用点分层级,例如测试工作区中的languages.python.data.string.md、dendron.ref.links.md,笔记文件名本身就是层级路径(见 test-workspace/vault 下的真实笔记命名)。用户无需预先规划目录结构,只需在创建笔记时输入带点的名称(如languages.python.data.bool),Dendron 会自动建立层级关系。
这种设计的核心优势在于:
- 任意体量:知识从几条笔记增长到上万条,层级结构始终可导航;
- 渐进式组织:先创建后整理,层级可以随时调整、重命名(Dendron 提供 Rename 命令并自动修复链接);
- 可复用模式:层级可以进一步与 schema(一种笔记类型系统)绑定,让特定层级下的笔记拥有统一的模板和字段。
如何开始:Initialize Workspace 命令
欢迎笔记给出的唯一“开始方式”是:打开命令面板(Ctrl+Shift+P/Cmd+Shift+P),执行Dendron: Initialize Workspace。
这条命令在源码中的注册位于 packages/plugin-core/src/constants.ts:
/** * This launches the welcome screen, which has a button that will launch the * tutorial when clicked. */ SHOW_WELCOME_PAGE: { key: "dendron.showWelcomePage", title: `${CMD_PREFIX} Launch Tutorial`, when: "shellExecutionSupported", }, LAUNCH_TUTORIAL_WORKSPACE: { key: "dendron.launchTutorialWorkspace", title: `${CMD_PREFIX} Launch Tutorial Workspace`, when: "false", },注意这里有个“名不副实”的设计:ShowWelcomePageCommand的注释明确写道,这个命令“实际上启动的是欢迎 Webview 页面”(ShowWelcomePageCommand.ts)。也就是说,dendron.showWelcomePage命令的作用是把欢迎页作为 VS Code Webview 渲染出来,而页面上的 “Get Started” 按钮才会真正去初始化教程工作区。
欢迎页在何时自动出现
欢迎页并非只靠手动命令触发。在扩展激活流程中,packages/plugin-core/src/_extension.ts 的showWelcomeOrWhatsNew会根据安装状态分支:
InstallStatus.INITIAL_INSTALL(首次安装):记录安装遥测后调用showWelcome(assetUri)展示欢迎页;InstallStatus.UPGRADED(版本升级):展示 “What's New” 更新说明。
也就是说,新用户安装 Dendron 插件后,欢迎页会自动弹出;老用户升级版本时看到的是更新内容。
欢迎页的渲染原理与媒体降级策略
showWelcome的实现位于 packages/plugin-core/src/WelcomeUtils.ts,其核心流程如下:
export function showWelcome(assetUri: vscode.Uri) { let content: string; let testgroup: string; if (semver.gte(vscode.version, "1.71.0")) { // 高版本 VS Code:渲染 welcome_video.html(视频) content = readMD(videoUri.fsPath).content; testgroup = WelcomePageMedia.video; } else { // 低版本 VS Code:渲染 welcome.html(GIF) content = readMD(uri.fsPath).content; testgroup = WelcomePageMedia.gif; } const panel = vscode.window.createWebviewPanel(...); panel.webview.html = content; ... }这里体现了两个值得注意的实现细节:
1. 按 VS Code 版本选择媒体形式
- VS Code
>= 1.71.0:渲染 welcome_video.html,页面内嵌<video>标签播放dendron_feature_highlights.webm功能演示视频; - 更低版本:渲染 welcome.html,回退为 GIF 动图。
源码注释解释了原因:“video formats are supported above vscode version 1.71. For users below this version, we render gif in welcome page”(视频格式从 VS Code 1.71 起才被支持,低版本用户用 GIF 兜底)。
2. Webview 与插件的双向消息通信
两个 HTML 文件都通过acquireVsCodeApi()获取 VS Code Webview API,并发送两类消息:
loaded:页面加载完成后上报,插件端据此埋点TutorialEvents.WelcomeShow,并附带testgroup(video/gif)作为分流实验维度;initializeWorkspace:点击 “Get Started” 按钮时触发,插件端在WelcomeUtils.ts的initWorkspace()中先埋点TutorialEvents.ClickStart,随后执行LaunchTutorialWorkspaceCommand。
async function initWorkspace() { await AnalyticsUtils.trackForNextRun(TutorialEvents.ClickStart); await new LaunchTutorialWorkspaceCommand().run({ invocationPoint: LaunchTutorialCommandInvocationPoint.WelcomeWebview, }); }这条链路证明:欢迎笔记/欢迎页不仅是静态文案,而是与遥测(Analytics)、命令系统(Command 架构)、教程初始化(TutorialInitializer)深度联动的启动引导组件。
Initialize Workspace 背后的工作区初始化链路
点击欢迎页按钮后,真正干活的是 LaunchTutorialWorkspaceCommand.ts:
export class LaunchTutorialWorkspaceCommand extends BasicCommand<CommandOpts, void> { key = DENDRON_COMMANDS.LAUNCH_TUTORIAL_WORKSPACE.key; async execute(opts: CommandOpts) { // 优先放到 ~/Dendron,若路径被占用则生成带数字后缀的新目录 const { filePath } = FileUtils.genFilePathWithSuffixThatDoesNotExist({ fpath: path.join(resolveTilde("~"), "Dendron"), }); await AnalyticsUtils.trackForNextRun(TutorialEvents.TutorialWorkspaceLaunching, { invocationPoint: opts.invocationPoint, }); await new SetupWorkspaceCommand().execute({ rootDirRaw: filePath, workspaceInitializer: new TutorialInitializer(), workspaceType: WorkspaceType.CODE, EXPERIMENTAL_openNativeWorkspaceNoReload: false, }); } }关键信息:
- 教程工作区默认创建在用户主目录的
~/Dendron下;若目录已存在,genFilePathWithSuffixThatDoesNotExist会自动追加数字后缀(如Dendron-1)避免冲突; - 工作区初始化由
TutorialInitializer完成(tutorialInitializer.ts),其核心逻辑是:- 通过
MetadataService.instance().setActivationContext(WorkspaceActivationContext.tutorial)记录激活上下文(engine-server 的 metadata service); - 从扩展资产目录读取
dendron-ws模板; - 将
dendron-ws/tutorial/treatments/<tutorialDir>/下的教程笔记复制到新工作区的 vault 中(fs.copySync); - 3 分钟后尝试弹出“导入笔记”功能提示 toast。
- 通过
TutorialInitializer继承自BlankInitializer并实现WorkspaceInitializer接口,源码注释将其定位为 “Tutorial Experience 的工作区初始化器:复制教程笔记,并在工作区打开后引导用户进入教程布局”。此外它还会为教程笔记注册专门的遥测处理逻辑,统计用户在教程中的currentStep/totalSteps进度。
如何继续:Quickstart 笔记(dendron.md)
欢迎笔记建议新用户接着阅读官方教程。在仓库中,对应资产的还有一份更详尽的快速入门笔记 dendron.md(其 frontmattertitle: Quickstart、nav_order: 1),它按三条难度递进的“路径”组织:
The Trail(基础路径)
- Lookup 创建笔记:
Cmd/Ctrl+L打开查找栏,输入新笔记名回车即可创建;也可通过命令面板执行Dendron: Lookup Note。这是 Dendron 最核心的交互——查找与创建合二为一; - Wiki 风格链接:直接输入
[[this link]],若目标笔记不存在,Dendron 会自动创建,实现“链接驱动建笔记”; - 查找已有笔记:
Cmd/Ctrl+L同时是全局搜索入口,可检索整个 vault 的笔记集合; - 删除笔记:命令面板执行
Dendron: Delete Node; - Snippet(代码片段):用于快速插入笔记模板;
- 插入图片、创建链接、发布(Publish)vault:覆盖日常写作与内容发布闭环。
The Woods(进阶路径)
- Schemas:Dendron 的“柔性类型系统”,为笔记层级定义结构约束与模板;
- Graph View:可视化笔记层级与链接关系(仓库中对应实现可参考 packages/dendron-viz);
- Pods:用于导入/导出笔记的数据管道;
- Special Notes、Frontmatter与自定义Dendron 命令。
The Wilderness(生态延伸)
- 常见操作 Recipes、问题反馈、公开路线图,以及基于 VS Code 编辑能力的使用习惯。
资产目录结构与可验证路径汇总
欢迎页与教程相关的全部资产位于 packages/plugin-core/assets/dendron-ws,其vault/子目录包含:
| 文件 | 作用 |
|---|---|
| dendron.welcome.md | 欢迎笔记(本文主体),介绍核心理念与起步方式 |
| dendron.md | Quickstart 快速入门笔记,分三阶路径展开功能清单 |
| root.md | 工作区根笔记 |
| root.schema.yml | 根 schema 定义 |
| welcome.html | 低版本 VS Code 欢迎页(GIF 版) |
| welcome_video.html | VS Code 1.71+ 欢迎页(视频版) |
assets/images/ | 欢迎页使用的 logo 资源 |
对应的源码证据链为:
- 页面渲染入口:WelcomeUtils.ts
- 手动打开命令:ShowWelcomePageCommand.ts
- 安装后自动展示逻辑:_extension.ts
- 命令注册定义:constants.ts
- 教程工作区初始化:LaunchTutorialWorkspaceCommand.ts 与 tutorialInitializer.ts
结语
dendron.welcome.md虽然只是一份看似简单的欢迎笔记,但它串联起了 Dendron 插件中最具代表性的“首次用户体验”工程链路:从 hierarchy-first 的产品理念,到 Initialize Workspace 命令,再到按 VS Code 版本降级的 Webview 媒体渲染,最终落到 TutorialInitializer 的工作区模板复制与遥测埋点。理解这条链路,不仅能快速上手 Dendron,也能为阅读其插件源码(packages/plugin-core)、引擎实现(packages/engine-server)以及构建自己的 VS Code 引导流程提供一份可对照的参考样板。
- 知识管理
- 知识库
【免费下载链接】dendron
The personal knowledge management (PKM) tool that grows as you do!
相关推荐
klog 完全指南:从 glog Fork 到 Kubernetes 分级日志库在 KubeSphere 中的实战应用
klog 完全指南:从 glog Fork 到 Kubernetes 分级日志库在 KubeSphere 中的实战应用 导读 klog( k8s.io/klog
知识管理知识库Dendron分层知识管理终极指南:从零散笔记到结构化知识体系的简单步骤
Dendron分层知识管理终极指南:从零散笔记到结构化知识体系的简单步骤 Dendron是一款强大的个人知识管理(PKM)工具,能够帮助你从零散的笔记碎片构建起
知识管理知识库思源笔记 vs Obsidian:2025年最全面的知识管理工具对比
思源笔记 vs Obsidian:2025年最全面的知识管理工具对比 你是否还在为选择合适的知识管理工具而烦恼?在信息爆炸的时代,一款高效的笔记软件能帮你理清思
知识管理知识库
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考