项目中安装了 sonar 之后, 怎么设置 eslint 校验优先

246 阅读2分钟

安装 SonarQube 或者与 Sonar 相关的工具(如 SonarLint)后,可能会导致 ESLint 校验被覆盖或者与 Sonar 的规则产生冲突。这通常是因为 Sonar 与 ESLint 一起工作时,默认配置中可能会设置某些规则优先级,使 Sonar 的规则覆盖了 ESLint。

问题原因:

  1. SonarQube 配置优先:如果你的项目中同时启用了 SonarQube 和 ESLint,Sonar 的规则可能会覆盖 ESLint 的规则,导致 ESLint 校验失效。
  2. 冲突的配置文件:Sonar 可能会在分析时启用自己的规则,忽略了 ESLint 的配置。可能存在不同的配置文件(如 .eslintrcsonar-project.properties)没有同步配置,导致冲突。

解决方法:

  1. 确保 ESLint 配置优先

    • 确保你的 ESLint 配置文件(如 .eslintrceslint.json)包含所有你想要的规则,并且没有被 Sonar 配置文件(如 sonar-project.properties)覆盖。
    • 检查 Sonar 配置文件sonar-project.propertiessonar.yml)中的相关设置,确保它没有禁用或影响 ESLint 的运行。
  2. 调整 ESLint 执行顺序: 如果你希望 ESLint 校验优先,可以在构建或 CI/CD 流程中调整执行顺序,确保 ESLint 在 Sonar 之前执行。你可以通过以下方式调整:

    • 在 SonarQube 分析之前运行 ESLint: 在你的构建或 CI/CD 脚本中,首先运行 ESLint,然后再运行 Sonar 的扫描。例如:

      # 运行 ESLint 校验
      eslint . --ext .js,.jsx,.ts,.tsx
      
      # 然后运行 SonarQube 扫描
      sonar-scanner
      
  3. 配置 ESLint 和 Sonar 同时运行: 如果你希望 ESLint 和 Sonar 都运行,但不希望 Sonar 覆盖 ESLint 的规则,可以调整 SonarLint 或 SonarQube 的设置,确保 ESLint 规则优先:

    • sonar-project.properties 中添加以下配置,禁用 Sonar 的 JavaScript/TypeScript 检查,使用 ESLint 进行检查:

      sonar.javascript.lcov.reportPaths=coverage/lcov-report/index.js
      sonar.javascript.eslint.enabled=true
      sonar.eslint.reportPaths=eslint-report.json
      
  4. 检查 SonarLint 插件设置: 如果你在编辑器中使用了 SonarLint 插件(例如 VSCode 插件),可以在插件配置中禁用 SonarLint 对 ESLint 规则的覆盖,确保 ESLint 规则优先执行。

  5. 在 CI/CD 中配置优先级: 在 CI/CD 配置中,确保 ESLint 校验是 Sonar 扫描之前的一步。例如,使用 GitLab CI 或 GitHub Actions 配置时,可以这样设置:

    - name: Run ESLint
      run: |
        npm run lint
    
    - name: Run SonarQube analysis
      run: |
        sonar-scanner
    

总结:

  • 确保 ESLint 在 SonarQube 之前运行,如果你希望 ESLint 校验优先。
  • 禁用 Sonar 对 JavaScript 或 TypeScript 代码的检查,让 Sonar 只关注其他类型的检查。
  • 检查和调整配置文件,确保 ESLint 配置和 Sonar 配置不会冲突。

通过以上配置,应该能够确保 ESLint 校验优先执行。如果还有其他问题,请告诉我!