执行npx expo start启动Expo项目时触发Invariant Violation报错求助
错误详情
Invariant Violation: expected symlink targets to be populated
at invariant (C:\Users\bujda\OneDrive\Dokumenty\rect\reactnative\ShoppingList\node_modules\invariant\invariant.js:40:15)
at TreeFS.bulkAddOrModify (C:\Users\bujda\OneDrive\Dokumenty\rect\reactnative\ShoppingList\node_modules\metro-file-map\src\lib\TreeFS.js:257:32)
at HasteMap._applyFileDelta (C:\Users\bujda\OneDrive\Dokumenty\rect\reactnative\ShoppingList\node_modules\metro-file-map\src\index.js:691:16)
at async C:\Users\bujda\OneDrive\Dokumenty\rect\reactnative\ShoppingList\node_modules\metro-file-map\src\index.js:327:9
at async DependencyGraph.ready (C:\Users\bujda\OneDrive\Dokumenty\rect\reactnative\ShoppingList\node_modules\metro\src\node-haste\DependencyGraph.js:95:5)
at async Bundler.ready (C:\Users\bujda\OneDrive\Dokumenty\rect\reactnative\ShoppingList\node_modules\metro\src\Bundler.js:69:5)
at async IncrementalBundler.ready (C:\Users\bujda\OneDrive\Dokumenty\rect\reactnative\ShoppingList\node_modules\metro\src\IncrementalBundler.js:289:5)
at async Server.ready (C:\Users\bujda\OneDrive\Dokumenty\rect\reactnative\ShoppingList\node_modules\metro\src\Server.js:1085:5) {
framesToPop: 1
}
可行解决步骤
清理缓存重启
执行命令彻底清除Metro和Expo缓存:npx expo start --clear若无效,手动删除Windows缓存目录:
%LOCALAPPDATA%\Expo\和%LOCALAPPDATA%\Temp\metro-cache,再重启项目。迁移项目路径
项目存放在OneDrive同步目录可能引发文件权限或符号链接异常,将项目移至本地非同步目录(如C:\Projects\ShoppingList),然后重装依赖:rm -rf node_modules package-lock.json yarn.lock npm install修复依赖符号链接
重新生成node_modules中的有效符号链接:npm rebuild用Yarn的话执行:
yarn install --force调整Metro配置
在项目根目录创建/修改metro.config.js,添加符号链接支持:const { getDefaultConfig } = require('@expo/metro-config'); const config = getDefaultConfig(__dirname); config.resolver.unstable_enableSymlinks = true; config.watchFolders = [__dirname]; module.exports = config;保存后重新启动项目。
降级Metro依赖
若为版本兼容性问题,尝试降级到稳定版(版本号需匹配你的Expo SDK版本):npm install metro@0.76.8 metro-file-map@0.76.8 --save-dev
内容的提问来源于stack exchange,提问作者Portal

