noname icon indicating copy to clipboard operation
noname copied to clipboard

[Feature] 添加扩展依赖功能

Open Rintim opened this issue 1 year ago • 2 comments

扩展机制发展至今,已经出现扩展功能互相依赖的情况,故应该添加扩展依赖机制,使被依赖的扩展加载在依赖扩展之前

现在需要探讨以下问题:

  • 该以什么形式使扩展声明自己的“依赖”
  • 无名杀该如何知道扩展所含的依赖项
  • 如何确定扩展的加载顺序
  • 如何解决“循环依赖”的情况

Rintim avatar Sep 25 '23 07:09 Rintim

简单做了个demo,大概思路是:加载有依赖的扩展时,检测依赖扩展是否已加载,若否则先等待这些扩展加载完成。 #453

  • 该以什么形式使扩展声明自己的“依赖” 在扩展根目录创建info.json,类似package.json { "dependencies": ["a"]} 说到package.json,是否考虑让扩展依赖可以像package.json一样指定依赖的版本范围?

  • 无名杀该如何知道扩展所含的依赖项 如上

  • 如何确定扩展的加载顺序 理论上不需要显式指定扩展的加载顺序(依赖关系本身已经指定了顺序)。 假设扩展A依赖B和C,则:

    • 若B,C之间没有依赖,则B,C可以任意顺序加载
    • 若B依赖C,则B会在C之后加载
  • 如何解决“循环依赖”的情况 使用一个map记录依赖关系,大概长这样 {A: {B:{}, C:{D:{}}}} 根据map可以获得任意两个扩展之间的加载路径,以上面的map为例,A到D的路径为A->C->D,D到A的路径为null 如果此时D也依赖了A,那么A到D和D到A的路径都不为null,可以判断A,D之间有循环依赖 目前代码的处理方式为A和D都不加载

Lucilor avatar Oct 03 '23 03:10 Lucilor

https://github.com/libccy/noname/pull/567 可以针对这个没合的PR改进

universe-st avatar Oct 29 '23 04:10 universe-st