运行lint-staged报Could not parse lint-staged config错误如何解决
运行lint-staged时的报错截图如下:
报错原因
配置解析报错的直接触发点是任务项使用了箭头函数语法:() => 'tsc --noEmit'。lint-staged v13及以上版本已经完全移除了对函数类型任务的支持,该调整是为了兼容JSON、YAML等不支持函数语法的配置文件格式,只要配置中存在函数类型的任务定义,就会直接抛出解析错误。
另外当前配置存在一个不影响运行但会降低执行效率的隐性问题:lint-staged按配置从上到下的顺序匹配文件执行任务,src/**/*.ts规则覆盖的ts文件,会被后续的**/*.{ts,js,json,yaml}规则重复匹配,导致prettier对同一份ts文件重复执行写入操作。
修复方案
将函数形式的任务替换为标准字符串命令即可解决解析报错,修复后的基础可用配置如下:
module.exports = { 'src/**/*.ts': ['eslint --fix', 'tsc --noEmit'], '**/*.{ts,js,json,yaml}': 'prettier --write', '**/*': 'inflint -c inflint.config.ts', };
补充说明:如果最初使用箭头函数的目的是执行全量项目TypeScript类型检查,避免lint-staged自动将暂存文件路径追加到tsc命令后(追加路径会导致tsc忽略项目tsconfig.json配置,类型检查结果不符合预期),需要将tsc命令修改为
tsc --noEmit --。命令末尾的--是lint-staged的特殊识别标记,作用是告知工具不要向该命令追加任何暂存文件参数。如果要解决prettier重复执行的问题,可以把ts文件的prettier处理合并到第一条规则中,调整prettier的匹配范围,优化后配置如下:
module.exports = { 'src/**/*.ts': ['eslint --fix', 'prettier --write', 'tsc --noEmit --'], '**/*.{js,json,yaml}': 'prettier --write', '**/*': 'inflint -c inflint.config.ts', };
内容的提问来源于stack exchange,提问作者devedvdevdev
相关产品推荐
相关产品推荐

