【问题标题】:How to run @angular-eslint/schematics:convert-tslint-to-eslint如何运行@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。

【问题讨论】:

    标签: angular eslint tslint angular-schematics


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 2021-12-22
        • 2016-10-24
        • 2019-08-04
        • 2019-01-23
        • 2021-08-23
        • 1970-01-01
        • 2021-09-16
        • 2021-03-14
        • 2020-02-20
        相关资源
        最近更新 更多