typescript 在Angular中,如何通过代码的静态分析来识别哪些组件被哪些路由使用

xpcnnkqh  于 2023-04-13  发布在  TypeScript
关注(0)|答案(1)|浏览(75)

我正在尝试理解一个大型的Angular应用程序并记录它,我首先希望将组件与路由相匹配,也就是说,知道运行哪些组件来构建由路由标识的给定“屏幕”,并在路由更改之前处理该屏幕中可能发生的所有不同的用户操作。
我想这样做的TS代码的静态分析,没有运行应用程序,也没有做任何预编译。
Compodoc看起来很有用,但是它不能正确解析路由文件,所以不能输出任何路由。这个项目看起来有点死气沉沉,很多问题都没有解决。
ngrev也会立即失败,不输出任何内容。
我用JavaScript编写了一些代码,这些代码使用TypeScript解析器的AST输出,该输出列出了应用程序的所有路径(通过跟踪延迟加载模块等),并标识了所有模块和组件。
但是,考虑到上述情况,是否可以通过纯静态分析来枚举构建屏幕所涉及的所有组件,而无需运行应用程序,也无需进行一些预编译等?或者,静态分析可以走多远,它可能会错过什么?
从根模块到当前屏幕,遵循组件声明和导入是否有意义?

ars1skjm

ars1skjm1#

这可能是一个相当复杂的任务,所以也许要走的路是把它分解成更小的任务。
1.标识Map到每条管线的组件。
1.给定一个组件类,找到与之关联的模板。注意模板可以内联定义,也可以在单独的文件中定义。
1.给定模板的代码,找到它引用的所有组件标记(选择器)。
1.给定一个组件选择器,找到与之关联的类。注意,它可能是在项目中定义的组件,也可能来自外部库。
这可能会涵盖大多数用例,除非您正在执行一些动态组件呈现操作。
你可能还想看看TypeScript代码中引用的组件,你可能会发现这样的用法:

openDialog() {
  this.dialogService.open(MyDialogComponent)
}

相关问题