在设计一个 node 的插件化框架,学习 obsidian 插件但是有一些代码没看懂,请指教

66 天前
 wjx0912

obsidian 本身是不开源的,但大多数插件开源,正在看它的思路,官网的 demo 是:

https://github.com/obsidianmd/obsidian-sample-plugin

这个 demo 只有一个源文件 main.ts:(主要是想知道 demo 怎么调用到 obsidian 内部的 loadData())

// main.ts
// 下面的 obsidian 通过 npm i obsidian 安装,
// 但是./node_modules/obsidian/的所有文件都是.d.ts 文件,没有任何函数实现

import { ......, Plugin, ...... } from 'obsidian';

export default class MyPlugin extends Plugin {  // demo 插件的主类
	......
	async loadSettings() {
		// demo 里面没有 loadData()的实现,也就是它调用了父类 Plugin::loadData()
		this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
	}
	......
}

父类 Plugin 代码在./node_modules/obsidian/obsidian.d.ts:

// obsidian.d.ts
export abstract class Plugin extends Component {
    ......
    loadData(): Promise<any>;
    ......
}

不管是 Plugin 还是 Component ,都没有 loadData 的实现,只有定义

loadData 应该是在 Obsidian 里面实现的,那么 MyPlugin 是怎么调用到 Obsidian 里面的 loadaData 函数呢?

希望大佬不吝赐教,万分感谢。

1582 次点击
所在节点    Node.js
16 条回复
wjx0912
66 天前
图片版本来了:

图 1:
![]( )
图 2:
![]( )
suyi2015
66 天前
`obsidian.d.ts`只是 ts 版本的类型定义而已,不是具体的实现。
Belmode
66 天前
打个断点,跟进去
lee88688
65 天前
也可以看看 vs code 插件思路
crocoBaby
65 天前
hello Kitty 现在技术这么强?之前还像萌新来着
wjx0912
65 天前
@crocoBaby 一直都很菜。。。
wjx0912
65 天前
@Belmode obsidian 禁了--inspect ,没法断点。哎
wjx0912
65 天前
@lee88688 这无疑是最佳方案,奈何能力不足,没信心看 vscode
wjx0912
65 天前
@suyi2015 是的,插件继承的是`obsidian.d.ts`的类型定义,但是它怎么调用到 obsidian 的实现呢
mtjgu
65 天前
看看那使用这个类 感觉是一个抽象基类
LuckyLauncher
65 天前
我记得 ob 的插件是运行在渲染进程的,所以你可以在界面上打开开发者工具,然后进行调试
EchoWhale
65 天前
无责任猜测:
它把源码的实现藏起来了,只给你定义。然后运行的时候通过扩展原型链来让插件可以访问到 loadData 方法,比如:
Object.assign(MyPlugin, {
loadData() {…}
})
EchoWhale
65 天前
Object.assign(MyPlugin.prototype, {
loadData() {…}
})
wjx0912
65 天前
wjx0912
65 天前
@EchoWhale 这个可能性非常大,我自己的先按这样做了。谢谢啦
lee88688
64 天前
@wjx0912 不需要看代码啊,看他的 extension 的开发文档也是可以的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1081973

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX