首次使用Sanity运行expo start遇jest-haste-map命名冲突问题求助
解决Expo + Sanity项目中jest-haste-map模块命名冲突问题
首次使用Sanity开发时,运行expo start命令会触发jest-haste-map模块命名冲突,报错显示根目录package.json与sanity/package.json文件重复,导致转换器构建失败,具体错误日志如下:
jest-haste-map: Haste模块命名冲突: deliveroo-clone 以下文件名称重复,请调整您的hasteImpl: * <rootDir>\package.json * <rootDir>\sanity\package.json 转换器构建失败: DuplicateError: 文件或模拟重复。请查看控制台获取更多信息 at setModule (C:\Users\Slima\Desktop\deliveroo-clone\node_modules\jest-haste-map\build\index.js:576:17) at workerReply (C:\Users\Slima\Desktop\deliveroo-clone\node_modules\jest-haste-map\build\index.js:647:9) at async Promise.all (index 10) at C:\Users\Slima\Desktop\deliveroo-clone\node_modules\jest-haste-map\build\index.js:459:22 at Function.load (C:\Users\Slima\Desktop\deliveroo-clone\node_modules\metro\src\node-haste\DependencyGraph.js:86:36) at Bundler.ready (C:\Users\Slima\Desktop\deliveroo-clone\node_modules\metro\src\Bundler.js:61:5) at IncrementalBundler.ready (C:\Users\Slima\Desktop\deliveroo-clone\node_modules\metro\src\IncrementalBundler.js:309:5) at Server.ready (C:\Users\Slima\Desktop\deliveroo-clone\node_modules\metro\src\Server.js:1156:5) { mockPath1: 'package.json', mockPath2: 'sanity\\package.json' } 无法识别的事件: {"type":"transformer_load_failed","error": {"mockPath1":"package.json","mockPath2":"sanity\\package.json","name":"Error","message":"文件或模拟重复。请查看控制台获取更多信息","stack":"Error: 文件或模拟重复。请查看控制台获取更多信息\n at setModule (C:\Users\Slima\Desktop\deliveroo-clone\node_modules\jest-haste-map\build\index.js:576:17)\n at workerReply (C:\Users\Slima\Desktop\deliveroo-clone\node_modules\jest-haste-map\build\index.js:647:9)\n at async Promise.all (index 10)\n at C:\Users\Slima\Desktop\deliveroo-clone\node_modules\jest-haste-map\build\index.js:459:22\n at Function.load (C:\Users\Slima\Desktop\deliveroo-clone\node_modules\metro\src\node-haste\DependencyGraph.js:86:36)\n at Bundler.ready (C:\Users\Slima\Desktop\deliveroo-clone\node_modules\metro\src\Bundler.js:61:5)\n at IncrementalBundler.ready (C:\Users\Slima\Desktop\deliveroo-clone\node_modules\metro\src\IncrementalBundler.js:309:5)\n at Server.ready (C:\Users\Slima\Desktop\deliveroo-clone\node_modules\metro\src\Server.js:1156:5)","}}
解决方案
- 配置Metro忽略Sanity子目录:在项目根目录创建或修改
metro.config.js,添加规则让Metro跳过扫描sanity文件夹,避免加载其package.json:
const { getDefaultConfig } = require('expo/metro-config'); const config = getDefaultConfig(__dirname); // 添加Sanity目录到忽略列表 config.resolver.blockList = [ /sanity\/.*/, ]; module.exports = config;
- 清理缓存并重启项目:执行以下命令清除Expo和Metro的缓存,再重新启动项目:
npx expo start --clear
- 确认Sanity独立运行:Sanity作为后端内容管理平台,其目录下的依赖和配置无需参与Expo前端打包,确保Sanity服务单独启动(如
sanity start),不与Expo打包流程冲突。
内容的提问来源于stack exchange,提问作者Abdellah Slimani
相关产品推荐
相关产品推荐

