macOS Monterey运行React Native遇Watchman无操作权限报错求助
macOS Monterey 运行React Native触发Watchman Operation not permitted报错修复
这是macOS Monterey上Watchman权限类的经典问题,手动开全磁盘访问、清缓存没生效基本是权限缓存、路径不匹配、版本bug这几个原因,按以下顺序操作即可:
- 重置系统TCC权限缓存
手动在设置里勾选权限经常因为系统缓存不生效,先执行命令重置对应App的权限记录:
执行完完全退出终端/ iTerm2,重新打开「系统偏好设置 > 安全性与隐私 > 完全磁盘访问」,重新勾选终端、Watchman选项,必须重启电脑,权限配置才会加载生效。# 重置Watchman的全磁盘访问权限 tccutil reset SystemPolicyAllFiles com.facebook.watchman # 重置系统终端的全磁盘访问权限 tccutil reset SystemPolicyAllFiles com.apple.Terminal # 如果你平时用iTerm2执行命令,额外执行这一句 tccutil reset SystemPolicyAllFiles com.googlecode.iterm2 - 修复项目目录权限
不要把React Native项目放在开了iCloud同步的目录(比如同步中的Documents、Desktop文件夹),这类目录的读写权限会被iCloud进程抢占,优先把项目移到~/Code这类非同步的自定义目录下。
如果暂时不想移动项目,直接对项目目录重新赋权:# 替换为你自己的项目实际路径 sudo chown -R $(whoami) /Users/abdullahshahid/Documents/caremiles-react-native-repo chmod -R 755 /Users/abdullahshahid/Documents/caremiles-react-native-repo - 补全配置并彻底清理缓存
先在项目根目录生成标准的.watchmanconfig配置文件,避免配置缺失触发的扫描异常:
之后彻底清除Watchman的历史状态和Metro缓存:# 必须在项目根目录执行 echo '{}' > .watchmanconfigwatchman shutdown-server rm -rf /usr/local/var/run/watchman/$(whoami)-state # 用npm就执行 npm start -- --reset-cache # 用yarn就执行 # yarn start --reset-cache - 降级修复Watchman版本bug
你当前用的2022.05.30.00版本Watchman在Monterey上有已知的文件权限判断bug,如果前面操作都没用,直接重装稳定版:
安装完成后执行brew uninstall watchman brew install watchman@2023.01.23.00 brew link watchman@2023.01.23.00 --forcewatchman version确认版本号,重启终端再启动项目。 - 修复Node版本兼容问题
你当前用的Node v18.2.0是18大版本的早期测试版,和metro、fb-watchman依赖存在已知兼容问题,切换到Node 18 LTS最新版或者Node 16 LTS即可:# 已装nvm可直接执行 nvm install 18 --lts nvm use 18 --lts # 切换版本后重装依赖 rm -rf node_modules npm install
注意:绝对不要用sudo执行npm start、react-native run-ios/run-android这类启动命令,sudo会让进程以root身份运行,生成的缓存文件普通用户无权读写,会反复触发权限报错。
内容的提问来源于stack exchange,提问作者Abdullah Shahid
相关产品推荐
相关产品推荐

