Open Gaubee opened 2 months ago
当前的架构看似模块分离,实则还是一个整体。因为其他kmp应用当前并无法简单的调用我们的模块。 因此我们需要把内核暴露出来,并且让其他kmp应用可以选择性的调用模块。
为了保持足够简单,并且遵循模块标准,用户开发的时候可以直接使用模块功能。
比如:
implementation({ group = "org.dweb", name = "core", version.ref = "std-dns" })
implementation({ group = "org.dweb", name = "core", version.ref = "browser-scan" })
import org.dweb.core.std.dns.nativeFetch
fun scanning() {
const response = nativeFetch("file://scan.browser.dweb/open")
}
// 当用户这样调用的时候,整个app将是一个模块。
或者采用自定义模块。
import org.dweb.core.module.NativeMicroModule
class TestNMM : NativeMicroModule("test.browser.dweb", "test module") {
// 实现dweb能力...
}
// 提供给外部调用
val testNMM =TestNMM().setup()
我们还得提供一个默认的window.std.dweb模块的实现,目前我们的window.std.dweb是由desk.browser.dweb来提供。 这是一个多窗口的平台。 而对于第三方应用,它们更多的是用于单个应用,所以不需要多窗口的模式。但不排除一些modal的需求,比如alert、sheet,这部分window.std.dweb中也有相关的定义。
随着应用内核越发丰富,同时我们又希望 dweb 本身保持简约
dev.***.dweb
,然后将这个域名注册成仓库,从而进行开发内核模块的关键作用在于为其它模块提供一些共享的能力,比方说“标准库”或者“官方库”,从而减少 jmm 本身的应用体积,同时减少内存的占用
标准库的使用实例一:使用原始的 ipc 通讯
标准库的使用实例二:使用 js 的 Reflex+Proxy 进行抽象的通讯
官方库的使用实例: