@babel/traverse 升级导致的编译错误

450 阅读1分钟

故障现象

最近在开发或者打包突然出现下面的错误提示。

编译:

调试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   

说明

  1. 为了解决部分第三方升级导致编译错误问题,需要使用package-lock.json文件来固定依赖版本。而npm6和npm7这两个版本所生成的package-lock.json格式不兼容,故要求全体使用npm7.6.3

步骤

  1. 删除node_modules
  2. 删除package-lock.json 和yarn.lock (如果存在)
  3. 修改package.json,在package.json的最外层加入
   "resolutions": {

    "@babel/traverse": "7.16.5"

  }
  1. yarn install --ignore-engines (node升级到15以后需要使用 --ignore-engines参数去 忽略对engine要求,@npmcli/fs 有对node版本设置要求 )
  2. 从.gitignore文件移除yarn.json(如果设置了全局gitignore,也需要移除,配置文件在用户目录下的.gitignore_global文件中)
  3. 将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"