React项目启动/构建报错:Module not found: Default condition should be last one
解决"Module not found: Error: Default condition should be last one"问题
问题原因
这个错误源于项目依赖包(比如firebase或@react-query-firebase/auth)的package.json文件中,exports字段的条件顺序不符合Node.js模块解析规范——默认条件("default")没有放在条件列表的末尾,而React Scripts 5.x搭配Node 16.x的webpack环境对该规范校验严格,导致模块解析失败。
解决方案
方案1:锁定兼容版本的依赖包
调整firebase及相关包版本
在package.json中指定已知兼容的版本(比如firebase@9.23.0、@react-query-firebase/auth@1.0.0),避免使用最新可能引入规范冲突的版本:
{ "dependencies": { "firebase": "9.23.0", "@react-query-firebase/auth": "1.0.0" } }
执行以下命令重新安装依赖:
rm -rf node_modules package-lock.json npm install
方案2:用react-app-rewired修改webpack配置(临时兼容)
如果不想调整依赖版本,可通过react-app-rewired覆盖默认webpack配置,放宽对exports条件顺序的校验:
- 安装依赖工具:
npm install react-app-rewired --save-dev
- 在项目根目录创建
config-overrides.js文件,添加配置:
module.exports = function override(config, env) { config.resolve = { ...config.resolve, mainFields: ['browser', 'module', 'main'], conditionNames: ['browser', 'module', 'main'] }; return config; };
- 修改
package.json中的启动脚本:
{ "scripts": { "start": "react-app-rewired start", "build": "react-app-rewired build", "test": "react-app-rewired test" } }
- 重新启动项目:
npm run start
方案3:升级Node.js版本(可选)
Node 18+对exports条件顺序的兼容性更好,若项目允许,可升级到Node 18.x LTS版本,大概率直接解决该问题。
内容的提问来源于stack exchange,提问作者danish
相关产品推荐
相关产品推荐

