如何正确启用ESLint缓存?传--cache参数报错解决方法
问题根源
抛出的npm WARN invalid config cache=true警告和ESLint无关,是npm自身的参数拦截逻辑导致的:npm内置了cache配置项,要求传入值必须是合法文件系统路径(用于指定npm自身的缓存存储目录)。当执行命令传入--cache=true时,npm会优先将该参数识别为自身配置,不会透传给npm run调用的下游脚本,无论后续是否追加--cache-location参数,ESLint端都收不到开启缓存的指令,警告会持续存在。
正确配置方案
临时执行:调整命令传参格式
不要给--cache传入true作为值,直接传入无赋值的标记位即可,npm不会拦截无值的--cache参数,可正常透传给下游脚本,正确命令如下:
npm run lint -- --cache --cache-location .eslintcache
如果使用yarn、pnpm作为包管理器,不存在该参数冲突问题,传--cache=true可正常生效,仅npm存在该命名冲突坑点。
长期生效:将缓存配置写入脚本
修改package.json内的lint脚本,直接把缓存参数写在esw调用命令中,无需每次执行手动传参:
{ "scripts": { "lint": "esw --cache --cache-location .eslintcache" } }
后续直接执行npm run lint即可自动启用缓存,不会触发参数拦截警告。
配置文件声明:在ESLint配置中开启缓存
也可以直接在ESLint配置文件(如.eslintrc.js)中声明缓存配置,无需在命令行传参,ESLint v7版本对应配置写法如下:
module.exports = { cache: true, cacheLocation: '.eslintcache', cacheStrategy: 'metadata', // 其余原有lint规则、环境配置保持不变 }
注意事项
- 若使用esw(eslint-watch)作为运行封装,需确认安装版本兼容当前ESLint v7的缓存参数,部分旧版本esw存在缓存参数透传bug,遇异常可升级esw至对应兼容版本。
- 生成的
.eslintcache缓存文件需加入.gitignore列表,不要提交到代码仓库。
内容的提问来源于stack exchange,提问作者AncientSwordRage
相关产品推荐
相关产品推荐

