问题描述
我正在寻找用于重构 Angular 应用的自动化解决方案,因为手动重构非常乏味。
当我们尝试通过将组件/指令树摇动到它们自己的模块中来减轻我们应用程序的共享模块时,需要检查应用程序中的每个功能模块并检查模板中是否存在指令或组件选择器。如果是,则模板所在的模块必须导入从共享模块中 treeshaken 的新指令/组件的模块。是否有任何重构工具可以帮助解决这个问题?感觉这是一个很普通的任务。
或者,如果不存在通用解决方案,我仍然想找到一种方法,至少以编程方式列出任何给定 .module.ts 文件的声明数组中组件的所有绝对路径。
我现在面临的解决问题是,
解决方法
这是一个非常好的问题,但我确信目前没有现成的工具可以解决您的问题。
我的建议:
- 以 https://github.com/ng-ast/ngast/tree/master 开头,您可以在那里找到 workspace.getAllModules 和 ngModule.getDeclarations 之类的方法。如果它至少由于某种原因不起作用,您可以检查作者如何准确地找到这些模块和组件
- 您可以使用 Typescript AST walker、许多 angular、nrwl 或 cdk AST-utils 以及来自
AngularCompiler
的一些技巧来编写自己的解决方案。但实际上这是一项艰巨的任务,因为它与AngularCompiler
做的事情相同!
请参阅这些链接以获取有用的实用程序
https://github.com/angular/angular-cli/tree/master/packages/schematics/angular/utility https://github.com/angular/components/tree/master/src/cdk/schematics/utils - 示例如何在您的
NgModules
中找到AppModule
,您可能想要做什么 - 它以递归方式解析所有这样的模块 https://github.com/angular/components/blob/5bd088e96e4cb1f59f92d7a0b054091df9fc9976/src/material/schematics/ng-update/migrations/hammer-gestures-v9/hammer-gestures-migration.ts#L724