故障现象
最近在开发或者打包突然出现下面的错误提示。
编译:
调试rn:
原因
由于babel升级导致转译ast树部分代码不兼容导致,需要将@babel/core 和@babel/traverse固定到版本7.16.5
临时解决方案
运行命令
yarn
版本
NodeJs : >= 14.18.0 < 15.12.0 (请勿升级)
Npm: <=7.6.3 (请勿升级)
Yarn: 1.22.17
建议配置
nodeJs :14.18.0
npm:6.14.15
yarn:1.22.17
往上再升级会出现node-sass,node-gyp等兼容问题。
源
yarn config set registry https://registry.npm.taobao.org
说明
- 为了解决部分第三方升级导致编译错误问题,需要使用package-lock.json文件来固定依赖版本。而npm6和npm7这两个版本所生成的package-lock.json格式不兼容,故要求全体使用npm7.6.3
步骤
- 删除node_modules
- 删除package-lock.json 和yarn.lock (如果存在)
- 修改package.json,在package.json的最外层加入
"resolutions": {
"@babel/traverse": "7.16.5"
}
- yarn install --ignore-engines (node升级到15以后需要使用 --ignore-engines参数去 忽略对engine要求,@npmcli/fs 有对node版本设置要求 )
- 从.gitignore文件移除yarn.json(如果设置了全局gitignore,也需要移除,配置文件在用户目录下的.gitignore_global文件中)
- 将yarn.lock提交到git中
Ps: 如果编译还出错请清理node_modules缓存,在rn编译命令中加入"--reset-cache",下面是pathes部分代码
--- a/node_modules/react-native/scripts/packager.sh
+++ b/node_modules/react-native/scripts/packager.sh
@@ -20,4 +20,4 @@ then
fi
# Start packager from PROJECT_ROOT
cd "$PROJECT_ROOT" || exit
-node "$REACT_NATIVE_ROOT/cli.js" start "$@"
+node "$REACT_NATIVE_ROOT/cli.js" start "$@" "--reset-cache"