如何批量为Angular所有项目执行TSLint转ESLint ng命令
Angular工作区批量迁移TSLint到ESLint的简便实现方案
官方@angular-eslint/schematics目前没有提供一次性为所有项目执行add-eslint-to-project的内置ng命令,不需要手动在上百个命令里拼接项目名,有更易维护的替代实现方式:
方案1:跨平台Node脚本(推荐,兼容Windows/macOS/Linux)
这个方案会自动读取angular.json中注册的所有项目,不需要手动维护项目名单,后续新增/删除项目也不用改脚本:
- 在项目根目录新建临时脚本文件
migrate-eslint.js,写入以下内容:
const { execSync } = require('child_process'); // 读取工作区所有项目名称 const projectList = execSync('ng projects', { encoding: 'utf8' }) .trim() .split('\n') .map(item => item.trim()) .filter(Boolean); // 遍历执行迁移,跳过交互确认 for (const project of projectList) { // 如有不需要迁移的项目,可在这里加判断跳过,比如if(project === '废弃项目名') continue console.log(`[ESLint迁移] 正在处理项目:${project}`); execSync( `ng g @angular-eslint/schematics:add-eslint-to-project ${project} --skip-confirmation`, { stdio: 'inherit', cwd: process.cwd() } ); } console.log('[ESLint迁移] 所有项目处理完成');
- 在
package.json中替换原来的迁移脚本:
"convert:eslint": "node migrate-eslint.js"
执行npm run convert:eslint即可自动完成所有项目的ESLint配置添加,全程无需手动干预。
方案2:Shell单行命令(仅适用于macOS/Linux/Git Bash/WSL环境)
如果不需要兼容Windows原生终端,可以不用单独建脚本文件,直接在package.json里写循环逻辑:
"convert:eslint": "for proj in $(ng projects); do ng g @angular-eslint/schematics:add-eslint-to-project $proj --skip-confirmation; done"
逻辑和Node脚本完全一致,只是通过Shell循环实现自动遍历项目。
注意事项
- 执行迁移前建议先提交当前工作区的所有代码,避免自动生成的配置改动和业务代码混杂,方便出问题时回滚
- 你之前手动拼接所有项目命令的方式虽然能正常运行,但维护成本很高,新增、删除项目时都需要手动修改脚本,自动读取项目列表的方案完全没有这个问题
- 如果需要批量把原有TSLint规则转换为ESLint规则,也可以在循环逻辑中追加对应的转换命令,一次性完成全量迁移
内容的提问来源于stack exchange,提问作者Kashyap
相关产品推荐
相关产品推荐

