Angular多项目仓库ng lint输出文件被覆盖,求结果合并方案
解决Angular多项目仓库Lint结果合并到单个文件的问题
方案一:临时文件合并法(适配Windows+Git Bash环境)
由于Angular CLI对多项目执行lint时,会逐个处理项目并覆盖输出文件,我们可以先让每个项目的结果输出到独立临时文件,再合并为一个总文件。
- 调整格式化脚本输出格式
确保你的my-format.js输出标准JSON数组(即使单个项目无问题,也要输出空数组[]),方便后续合并:
module.exports = function(results) { // 直接将当前项目的lint结果数组转为JSON输出 return JSON.stringify(results); };
- 编写批量执行脚本
创建merge-lint-results.sh脚本,或直接在Git Bash中逐行执行以下命令:
# 创建临时目录存放单个项目的lint结果 mkdir -p ./reports/temp-lint # 遍历projects目录下的所有项目,分别执行lint并输出到临时文件 for project in ./projects/*; do if [ -d "$project" ]; then project_name=$(basename "$project") ng lint "$project_name" --format ./my-format.js --output-file "./reports/temp-lint/${project_name}.json" fi done # 合并所有临时JSON文件为一个总数组 echo "[" > ./reports/eslint_issues.json first_file=true for file in ./reports/temp-lint/*.json; do if $first_file; then # 第一个文件去掉前后的[],直接写入 sed 's/^\[\(.*\)\]$/\1/' "$file" >> ./reports/eslint_issues.json first_file=false else # 后续文件先加逗号,再去掉[]写入 echo "," >> ./reports/eslint_issues.json sed 's/^\[\(.*\)\]$/\1/' "$file" >> ./reports/eslint_issues.json fi done echo "]" >> ./reports/eslint_issues.json # 清理临时文件 rm -rf ./reports/temp-lint
- 运行脚本
在Git Bash中执行:
chmod +x merge-lint-results.sh ./merge-lint-results.sh
方案二:自定义Angular CLI Lint目标(更简洁)
通过修改angular.json,让lint一次性扫描所有项目文件,避免逐个项目执行导致的文件覆盖:
- 添加自定义lint目标
在angular.json中,找到根节点下的architect字段,新增lint-all目标:
"architect": { "lint-all": { "builder": "@angular-eslint/builder:lint", "options": { "lintFilePatterns": [ "src/**/*.ts", "projects/**/*.ts" ], "format": "./my-format.js", "outputFile": "./reports/eslint_issues.json" } } }
注意lintFilePatterns要覆盖所有项目的文件路径,可根据实际目录结构调整。
- 执行自定义lint命令
ng run 你的根项目名称:lint-all
替换你的根项目名称为angular.json中defaultProject字段的值。
注意事项
- 确保
my-format.js输出的是标准JSON数组,否则合并时会出现语法错误。 - 方案二中要确认
lintFilePatterns覆盖了所有需要检查的文件,避免遗漏。
内容的提问来源于stack exchange,提问作者Tiju John
相关产品推荐
相关产品推荐

