如何运行@angular-eslint/schematics:convert-tslint-to-eslint
Posted
技术标签:
【中文标题】如何运行@angular-eslint/schematics:convert-tslint-to-eslint【英文标题】:How to run @angular-eslint/schematics:convert-tslint-to-eslint 【发布时间】:2021-07-13 19:55:37 【问题描述】:我正在尝试按照angular-eslint Github repo 中的说明将 Angular 项目从 TSLint 切换到 ESLint。
我运行了ng add @angular-eslint/schematics
,它在我的 package.json 中添加了以下依赖项:
"@angular-eslint/builder": "1.2.0",
"@angular-eslint/eslint-plugin": "1.2.0",
"@angular-eslint/eslint-plugin-template": "1.2.0",
"@angular-eslint/schematics": "1.2.0",
"@angular-eslint/template-parser": "1.2.0",
"@typescript-eslint/eslint-plugin": "4.3.0",
"@typescript-eslint/parser": "4.3.0",
"eslint": "7.6.0",
"eslint-plugin-import": "2.22.1",
"eslint-plugin-jsdoc": "30.7.6",
"eslint-plugin-prefer-arrow": "1.2.2",
另外,运行npm install
以确保这些都已安装。
现在我被指示运行:
ng g @angular-eslint/schematics:convert-tslint-to-eslint --remove-tslint-if-no-more-tslint-targets --ignore-existing-tslint-config
但是,这会导致错误:
Unknown option: '--remove-tslint-if-no-more-tslint-targets'
Unknown option: '--ignore-existing-tslint-config'
当我删除这些选项时,我收到另一个错误:
Invalid rule result: Instance of class Promise.
这个 angular-eslint 示意图似乎没有正确安装。但是,对于这些原理图,我完全是新手。我一定在这里遗漏了一些明显的东西。
使用@angular/cli 10.2.3。
【问题讨论】:
【参考方案1】:这取决于项目的 Angular 版本,因为它为不同的 Angular 版本安装不同版本的 @angular-eslint/schematics
步骤将是:
A.将@angular-eslint 添加到您的项目中:
ng add @angular-eslint/schematics
如果你有一个 Angular 12 项目(没有 tslint),你就完成了!
B.要从 tslint Angular 11 或 12 迁移,请运行以下命令:
ng g @angular-eslint/schematics:convert-tslint-to-eslint --remove-tslint-if-no-more-tslint-targets
(仅当您想忽略旧的 tslint 配置时才使用:--ignore-existing-tslint-config
标志)
如果您使用的是 Angular 9 或 10,则会安装旧版本的原理图,并且转换命令会略有不同。在转换为 ESLint 之前,您可能希望优先升级 Angular。但是如果你真的想先升级 linting,使用这个命令:
ng g @angular-eslint/schematics:convert-tslint-to-eslint <project-name-here>
Detailed blog for tslint to eslint migration
【讨论】:
谢谢,这正是我所需要的:“如果你有一个 Angular 12 项目,你就完成了!” - 无需运行转换【参考方案2】:如果 CLI 询问您时您不知道项目的名称是什么
Which project would you like to convert from TSLint to ESLint?
可以在projects
属性下的angular.json
中找到(通常在第8行)
【讨论】:
【参考方案3】:如果您要迁移现有项目,那么您应该运行其中一个
ng g @angular-eslint/schematics:convert-tslint-to-eslint
或
ng g @angular-eslint/schematics:convert-tslint-to-eslint YOUR_PROJECT_NAME_GOES_HERE
而不是
ng g @angular-eslint/schematics:convert-tslint-to-eslint --remove-tslint-if-no-more-tslint-targets --ignore-existing-tslint-config
根据指导方针https://github.com/angular-eslint/angular-eslint#step-2---run-the-convert-tslint-to-eslint-schematic-on-a-project
【讨论】:
在这种情况下,我得到Invalid rule result: Instance of class Promise.
错误,正如我已经指出的那样。
你的全局 Angular cli 版本是多少?
本地和全局都是10.2.3
理想情况下它应该可以工作。尽管我的全局 Angular cli 版本是 11.x.x,但我也已迁移到 Angular 版本 10 中的 eslint。尝试将您的全局 cli 版本更新为最新的 cli。 github.com/angular/angular-cli/issues/15290添加以供参考。
没有区别。除了我还收到有关 angular-cli 的本地版本和全局版本之间不匹配的警告。【参考方案4】:
尝试运行以下命令,看看是否有效:
npm install @schematics/angular@latest -g
remove node_modules
remove package-lock.json
npm install
【讨论】:
以上是关于如何运行@angular-eslint/schematics:convert-tslint-to-eslint的主要内容,如果未能解决你的问题,请参考以下文章