关于undefined is not an object(evaluating 'HotUpdate.downloadRootDir')错误的解决办法



  • 安卓端刚开始遇到这个问题以为是自己配置出错了,各种切换rn版本都不行,然后以为自己没依赖上项目就手动配置了依赖;最后发现还是不行,就去看了下源码,发现是文档里面缺少了一句很关键的代码,需要在getPackages方法中添加new UpdatePackage();

    rn0.29后在Mainapplication中,rn0.29前在MainActivity中:

    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
              new UpdatePackage()
      );
    }
    

    记得导包:import cn.reactnative.modules.update.UpdatePackage;

    另外再说一句,有时候用rnpm去link代码的时候会失败,需要手动配置,
    具体如下:
    在项目android目录下的setting.gradle文件中添加
    include ':react-native-update'
    project(':react-native-update').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-update/android')
    然后在app目录下的build.gradle文件中添加
    dependencies {
    compile project(':react-native-update') // <-- 这一句
    compile fileTree(dir: "libs", include: ["*.jar"])
    compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.facebook.react:react-native:+" // From node_modules
    }

    然后就可以运行了



  • 环境一点问题都没有,该加的都加了,还是会提示这个错误,我用的是0.34版本
    $ npm install -g react-native-update-cli
    $ npm install --save react-native-update
    $ react-native link react-native-update
    这3个命令都成功了,一样报这个错误。怎么会这样



  • @ocman rnpm link或react-native link都未必靠谱(版本迭代太快,规则未必匹配),如果都显示成功仍然报这个错误,那只能考虑对着文档进行手工link



  • @sunnylqm 手动我也配置过了,就是不知道还有没有遗漏照着说明弄的,有完整的一个link说明吗,不知道手动link还差什么了?把我给急坏了,弄了好多天



  • @sunnylqm 我把版本升级到了最新的0.37版本,就会报这样的错误:

    E:\work\TestMy>react-native link react-native-update
    events.js:160
    throw er; // Unhandled 'error' event
    ^

    Error: write EINVAL
    at exports._errnoException (util.js:1022:11)
    at WriteStream.Socket._writeGeneric (net.js:715:26)
    at WriteStream.Socket._write (net.js:734:8)
    at doWrite (_stream_writable.js:334:12)
    at writeOrBuffer (_stream_writable.js:320:5)
    at WriteStream.Writable.write (_stream_writable.js:247:11)
    at WriteStream.Socket.write (net.js:661:40)
    at WriteStream.stream.write (E:\work\TestMy\node_modules\ansi\lib\newlines.js:36:21)
    at Object.execFileSync (child_process.js:506:20)
    at Object.run (E:/work/TestMy/node_modules/react-native/local-cli/cliEntry.js:157:16)



  • @ocman 你是不是同时把node升到了7.1?这个问题好像跟node 7.1有关





  • @sunnylqm
    对,因为我都试过几乎所有方式了,最后才去试升级所有环境和组件,node升级到了7.1了,手动的link的方式我按照你发的链接都试过了,一样那个错误的,为什么react-native-pushy一直都没有做一次BUG的更新呢,react-native-pushy本身是官方开发的吗?有没有其他的方式去做APP的热更新呀?



  • @ocman 手动link并且重新react-native run-android后,这个错误应当可以被解决的,我们一直有测试这个组件,并且在很多产品中应用,在这方面没有BUG。

    Node 7.1是无法进行react-native link的,这是Node本身的BUG,你可以用Node 6.x进行尝试。



  • @ocman 如果还是不行,我可以QQ协助你排查问题。我的QQ 402740419