Node 18.7.0编译Nuxt报错:Rule仅能有一个资源源,求排查原因
问题排查:Webpack RuleSet 资源源冲突错误
环境信息
- Node版本:18.7.0
- npm版本:8.13.2
项目package.json配置
{ "version": "1.0.0", "scripts": { "dev": "node ./pm2.js", }, "dependencies": { "@nuxtjs/axios": "5.10.2", "@nuxtjs/style-resources": "1.0.0", "@sendgrid/mail": "6.3.1", "axios": "0.19.2", "cheerio": "1.0.0-rc.2", "compression": "1.7.4", "cookie-parser": "1.4.6", "express": "4.17.1", "geoip2ws": "1.8.10", "gsap": "2.1.3", "lodash": "4.17.21", "moment": "2.29.4", "mongoose": "5.9.10", "morgan": "1.10.0", "nuxt": "2.15.8", "pm2": "4.4.0", "request": "2.88.0", "sitemap": "2.2.0", "vcards-js": "2.10.0", "vuex-router-sync": "5.0.0" }, "devDependencies": { "@babel/core": "7.18.10", "@babel/eslint-parser": "7.18.9", "chokidar": "3.4.0", "eslint": "8.21.0", "eslint-config-standard": "17.0.0", "eslint-plugin-vue": "9.3.0", "eslint-webpack-plugin": "2.7.0", "normalize-scss": "7.0.1", "postcss-preset-env": "6.7.0", "sass": "1.54.0", "sass-loader": "10.3.1" }, "engines": { "node": "18.7.0", "npm": "8.13.2" } }
运行错误信息
Error: Rule can only have one resource source (provided resource and test + include + exclude) in { "use": [ { "loader": "/usr/src/app/node_modules/babel-loader/lib/index.js", "options": { "configFile": false, "babelrc": false, "cacheDirectory": true, "envName": "server", "presets": [ [ /usr/src/app/node_modules/@nuxt/babel-preset-app/src/index.js, { "corejs": { "version": 2 } } ] ] }, "ident": "clonedRuleSet-30.use[0]" } ] } at checkResourceSource (/usr/src/app/node_modules/@nuxt/webpack/node_modules/webpack/lib/RuleSet.js:167:11) at RuleSet.normalizeRule (/usr/src/app/node_modules/@nuxt/webpack/node_modules/webpack/lib/RuleSet.js:198:4)
排查建议
- 降级Node版本:Nuxt 2.15.8对Node 18的支持不完善,优先切换到Node 14.x或16.x LTS版本测试,这是触发该错误的常见诱因。
- 调整Babel依赖版本:当前@babel/core 7.18.10与Nuxt 2.15.8内置的@nuxt/babel-preset-app版本不匹配,将@babel/core锁定到7.15.x版本后重新安装依赖。
- 移除eslint-webpack-plugin:Nuxt 2.x已内置eslint-loader,额外添加eslint-webpack-plugin会导致Webpack规则冲突,删除该依赖后再运行项目。
- 清理重复依赖:执行
npm ls babel-loader检查是否存在多版本babel-loader,如有则运行npm dedupe去重,或在package.json中锁定babel-loader为8.x版本(Nuxt 2.15.8兼容版本)。 - 清除缓存重装:删除node_modules、package-lock.json,执行
npm install,同时运行npx nuxt clean清除Nuxt缓存,避免旧配置干扰。
内容的提问来源于stack exchange,提问作者MicroMan
相关产品推荐
相关产品推荐

