React Native+Xcode项目可构建但无法归档,MobX装饰器问题咨询
在React Native + Xcode项目中用MobX装饰器:可行吗?怎么解决归档报错?
先给你吃颗定心丸
当然可行,而且非常推荐用装饰器写MobX代码!这是MobX官方推崇的写法之一,能让你的状态管理代码简洁不少,可读性直接拉满。你遇到的归档报错只是Babel配置的小问题,调一下就能搞定。
为啥会报这个错?
你看到的SyntaxError: Method has decorators, put the decorator plugin before the classes one,核心原因是:Xcode归档触发的是生产环境构建,但你的装饰器插件只在development环境里启用了。生产构建时Babel没加载装饰器转换插件,自然就认不出装饰器语法了。
一步步修复
1. 修正你的.babelrc配置
把装饰器插件从development环境移到全局,确保生产构建也能用上它,同时注意插件名称的拼写(你之前写的transform-decoratorslegacy少了连字符,这也可能导致插件不生效):
{ "presets": [ "babel-preset-react-native-stage-0/decorator-support", "react-native" ], "plugins": [ "transform-decorators-legacy" ], "env": { "development": { "plugins": [ "transform-react-jsx-source" ] } } }
2. 理清楚依赖
你的package.json里重复写了babel-preset-react-native-stage-0,先把重复项删掉,保持版本统一。另外确认babel-plugin-transform-decorators-legacy已经装好了,没装的话跑下面的命令:
npm install babel-plugin-transform-decorators-legacy --save-dev
3. 清缓存,重新构建
RN的缓存有时候会搞事情,先清干净再试:
watchman watch-del-all rm -rf node_modules && npm install rm -rf $TMPDIR/react-* npm start -- --reset-cache
做完这些再去Xcode里尝试归档,应该就能成功了。
额外小贴士
- 你用的RN 0.52版本确实需要依赖Babel插件来支持装饰器,要是之后升级到0.60+的版本,Babel配置会更简单,但当前版本只要配置对了完全没问题。
- 如果之后转用TypeScript,装饰器的支持会更顺畅,TS原生就认装饰器语法,不用额外装Babel插件。
内容的提问来源于stack exchange,提问作者Dan B
相关产品推荐
相关产品推荐

