NX Vue Monorepo构建失败:ESLint加载node_modules内插件配置出错
Vue项目迁移Monorepo后Build阶段ESLint误解析node_modules内包配置的问题解决
问题场景
本地开发服务器可正常启动:
> nx run texasholdem:dev > vite --mode localdev VITE v5.0.12 ready in 1267 ms
但执行build:local命令时,ESLint尝试加载node_modules内包的自定义配置文件,报错:
> nx run texasholdem:build-local > vue-tsc --build --force > vite build --mode localdev [vite-plugin-pwa:build] Failed to load config "@ljharb" to extend from. Referenced from: C:\Users\lukXmelo\Documents\GitHub\texasholdem\node_modules\qs\.eslintrc file: C:/Users/lukXmelo/Documents/GitHub/texasholdem/node_modules/qs/lib/index.js
移除vite-plugin-pwa插件后,仍出现同类错误:
[commonjs--resolver] Failed to load config "@ljharb" to extend from. Referenced from: C:\Users\lukXmelo\Documents\GitHub\texasholdem\node_modules\qs\.eslintrc file: C:/Users/lukXmelo/Documents/GitHub/texasholdem/node_modules/qs/lib/index.js
已将node_modules添加至eslintrc.js的ignoredPatterns及.eslintignore中,但问题仍未解决,涉及的包包括qs、chroma.js和eslint-config-airbnb。
解决方案
1. 强化ESLint根配置,阻断子目录配置读取
在项目根目录的.eslintrc.js中,开启root: true(ESLint会停止向上查找配置,也不会读取node_modules内的子配置),同时明确忽略规则:
module.exports = { root: true, // 明确忽略node_modules下所有文件 ignoredPatterns: ['node_modules/**', 'dist/**', '*.config.js'], parserOptions: { project: ['./tsconfig.json'], tsconfigRootDir: __dirname, // 限定只解析项目源码相关文件 extraFileExtensions: ['.vue'] }, // 其他ESLint规则配置... }
2. 配置NX Build任务的ESLint忽略规则
在项目的project.json中,针对build-local任务添加ESLint忽略配置,避免NX扫描node_modules:
{ "targets": { "build-local": { "executor": "@nx/vite:build", "options": { "mode": "localdev", "eslint": { "ignorePatterns": ["node_modules/**"] } }, "dependsOn": ["^build"] } } }
3. 禁用Vite插件的额外ESLint扫描
部分Vite插件(如vite-plugin-pwa、commonjs解析插件)会触发独立的ESLint检查,需在插件配置中明确关闭对node_modules的扫描:
以vite-plugin-pwa为例,修改vite.config.js:
import { VitePWA } from 'vite-plugin-pwa' export default defineConfig({ plugins: [ VitePWA({ build: { // 禁用插件对node_modules的ESLint检查 eslint: false } }) ] })
4. 清理缓存并重装依赖
缓存可能导致配置不生效,执行以下命令重置环境:
# 重置NX缓存 nx reset # 删除依赖及锁文件 rm -rf node_modules package-lock.json # 重装依赖 npm install
内容的提问来源于stack exchange,提问作者Lukas Chmelo
相关产品推荐
相关产品推荐

