GHNavigatorBarStyle.android.js使用问题



  • 问题是这样的,react-native-gitfeed源码中有个Routes.js文件,其中有一行很奇怪,
    0_1463043067088_1.png

    在react-native-gitfeed工程真机调试没问题,但是我自己工程同样引用,真机调试就会出现问题,错误如下:
    0_1463043146771_2.png

    这明显是在iOS平台下react-native-xcode.sh打包, 不拷贝Android资源,导致找不到js文件,我屏蔽对应Android引用
    即可真机调试。

    那么问题来了,为啥react-native-gitfeed可以真机调试呢?很奇怪,我尝试使用本地mainbundle.js发现
    NavigatorNavigationBarStyle运行打包后被替换成NavigatorNavigationBarStylesIOS了,以下是截图:
    0_1463043510516_3.jpg
    0_1463043567370_4.png

    这个类GHNavigatorBarStyle.android.js,可以通用iOS、安卓吗?为啥我iOS引用打包bundle里面会被修改成NavigatorNavigationBarStylesIOS类???



  • 1、这个引用使用了完整文件名(加了.android后缀),即作为普通模块引用(不针对平台区分),应该不会被packager屏蔽,所以在iOS和Android下应该都可以正常引用,你检查下是不是复制少了文件,或者需要清除packager缓存(react-native start --resetCache)
    2、打包后被替换是因为facebook有个内部的providesModule声明,https://github.com/xiekw2010/react-native-gitfeed/blob/21fe222279097b4815fecd2fcdb784582b078f42/AppComponents/GHNavigatorBarStyle.android.js#L25 不必深究。facebook自己也会逐渐替换掉这种破坏规则的做法。



  • 我确定文件是有的。使用下面方式清理还是报错:

    1. Clear watchman watches: watchman watch-del-all.
    2. Delete the node_modules folder: rm -rf node_modules && npm install.
    3. Reset packager cache: rm -fr $TMPDIR/react-* or npm start -- --reset-cache.

    我让我同事电脑跑我的Demo也会报同样的错误,觉得是不是gitfeed做了啥特殊配置,好奇怪!!!!