You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:06:10