ESLint配置webpack为import/resolver时无法识别部分模块
问题根因
报错核心原因有两点:
- 触发报错的
react-hook-form、@headlessui/react均为纯ESM包,入口通过package.json的exports字段声明,你当前使用的eslint-import-resolver-webpack版本或配置默认不支持该字段解析 - ESLint配置中未显式指定resolver对应的webpack配置路径,resolver没有读取到你定义的resolve规则,仅靠默认查找逻辑无法匹配部分包的入口
可正常解析的react、react-dom等依赖为CommonJS/ESM双格式包,兼容旧的main/module字段解析逻辑,因此不会触发报错。你之前调整webpack的resolve.modules、mainFields配置无效,是因为问题根源不在webpack侧,而在ESLint的resolver配置。
修复方案
- 先升级相关依赖到最新版本,保证基础解析能力兼容ESM包规则:
npm install --save-dev eslint-plugin-import@latest eslint-import-resolver-webpack@latest
- 修改ESLint配置文件(
.eslintrc.js/.eslintrc.json等),显式配置import解析规则:
// .eslintrc.js 配置片段 module.exports = { // 其余原有ESLint配置保持不变 settings: { 'import/resolver': { webpack: { // 显式指定项目webpack配置文件的相对路径,不要依赖默认查找逻辑 config: './webpack.config.js', resolve: { // 开启对package.json exports字段的解析支持 conditionNames: ['import', 'module', 'browser', 'main'] } }, // 增加node模块解析兜底规则 node: { extensions: ['.js', '.jsx', '.ts', '.tsx'] } } } }
- Webpack 5+默认已将
node_modules作为模块查找目录,不需要额外在resolve.modules中重复配置,该操作对解决当前问题无意义。 - 配置保存后,重启编辑器ESLint服务或重载窗口,报错即可消除。
内容的提问来源于stack exchange,提问作者Kanishk Kaushik
相关产品推荐
相关产品推荐

