运行npm run lint与直接执行eslint命令输出结果不一致如何解决
问题原因分析
- 核心问题是通配符解析环境差异:
你直接在终端执行命令时,js/**/*这个通配符是由你当前使用的 shell(比如zsh、bash)解析的,多数现代shell默认支持**递归匹配规则,可以正确命中js目录下所有层级的目标文件。
而通过npm run执行脚本时,npm会调用内置的默认shell来解析命令:类Unix系统默认调用sh、Windows系统默认调用cmd/powershell,这些环境默认不支持**这种globstar递归匹配规则,最终只会匹配到js目录下第一层级的文件,如果你的错误文件都在深层子目录里,eslint扫描不到对应文件自然不会输出错误。 npm run test正常的原因是jest会自行处理测试文件的匹配逻辑,不需要依赖shell解析通配符,所以不受这个问题影响。
解决方案
优先选择通用兼容性最高的方案:把通配符交给eslint本身解析,避免shell提前解析通配符,修改package.json的scripts配置即可:
{ "name": "my app", "scripts": { "test": "npx jest", "lint": "npx eslint \"js/**/*\"" } }
如果是仅在类Unix环境使用,也可以用单引号包裹通配符:
"lint": "npx eslint 'js/**/*'"
另外也可以把匹配规则写入.eslintrc配置文件的include字段,scripts里直接简化为npx eslint,稳定性更高。
内容的提问来源于stack exchange,提问作者mincom
相关产品推荐
相关产品推荐

