【Win10+RN0.22.2】构建 Example:UIExplorer:Android 运行报错:Error: Requiring module "Promise"



  • 【Win10+RN0.22.2】构建 Example:UIExplorer:Android 运行报错:Error: Requiring module "Promise"

    一、编译环境:
    Win10 + RN 0.22.2 + Node v5.9.1 + Android SDK/NDK + HTC Sense 实机安装

    二、编译命令:
    gradlew :Example:UIExplorer:android:app:installDebug
    gradlew :Examples:Movies:android:app:installDebug

    三、编译……
    …… ……
    …… ……
    Installing APK 'app-debug.apk' on 'HTC M8t - 6.0' for app:debug
    Installed on 1 device.

    BUILD SUCCESSFUL

    四、使用如下服务端启动命令启动正常:
    node "./local-cli/cli.js" start "$@"

    五、摇动手机 Reload JS 后红屏,报错误信息如下:

    Error: Requiring module "Promise" which threw an exception (http://localhost:8081/Examples/UIExplorer/UIExplorerApp.android.bundle?platform=android&dev=true&hot=false:63)

    六、个人判断:
    http://localhost:8081/Examples/UIExplorer/UIExplorerApp.android.bundle?platform=android&dev=true&hot=false:63 这里获取到的 UIExplorerApp.android.js 文件里有 ES6 原生 Promise 对象调用,在文档:
    http://reactnative.cn/docs/0.22/javascript-environment.html#content
    中有JavaScript环境说明,猜测可能是真机环境与Node v8环境差异造成,那么有没有办法消除这个差异呢?这个"Promise"是否属于依赖特定运行环境的的代码呢?不知其它人其它环境是否有这个问题,是否有解决的办法?

    稍后我会用其它版本试试……
    0_1459258702851_UIExplorer_Error.png


  • administrators

    貌似是需要引入babel-polyfill? @tdzl2003



  • 我的node_modules里有这个模块啊……


  • administrators

    @AndJoy 在index.android.js第一行里加上
    require('babel-polyfill');
    试试



  • @sunnylqm
    好,我试试……



  • 不行……因为是官方的UIExplorerApp示例,我修改的文件是:
    ...\Examples\UIExplorer\UIExplorerApp.android.js 这个

    0_1459259429718_babel-polyfill.png



  • 世事总是那么奇妙,果然睡一觉就好了……

    经过是这样的:
    1、先把RN 0.22.2删掉,换成RN 0.21.0;然后 npm install、gradlew :Example:……发现运行是OK的!
    2、期间干什么了么?npm install时node-gyp有报错,参考这里:第12.,添加了两个环境变量:PYTHON、GYP_MSVS_VERSION;还升级了下npm版本到最新;有个fsevent的貌似只支持OSX,略过;就这些吧……
    3、然后,再删掉RN 0.21,重新换成RN 0.22.2,再来:npm update、gradlew :Example:……咦,竟然也好了,没有那个“Promise”问题了!
    4、说不好是不是因为那两个环境变量问题( ╯□╰ )

    可以结贴了(虽然问题搞得并不是很清楚 囧)……


  • administrators

    分析过程赞。但其实官方的demo有很多牵扯不清的依赖,历史包袱很多,所以建议只参考代码层面的东西,不用在环境和运行上浪费太多时间。



  • 是的,换成RN 0.22.2后,npm update时,冒出一些诸如:

    npm WARN deprecated graceful-fs@3.0.8: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
    npm WARN deprecated lodash@1.0.2: lodash@<3.0.0 is no longer maintained. Upgrade to lodash@^4.0.0.
    npm WARN deprecated graceful-fs@1.2.3: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
    npm WARN deprecated line-numbers@0.2.0: Copy its ~20 LOC directly into your code instead.

    等等一些依赖提示,已无力分析……等1.0后再看看吧,但就目前来说,心里的坎算是过了,不那么纠结了,可以安心研究代码了……



  • 自建高速SS科学上网,欢迎来用~
    https://fq.tianyu.xyz

    0

登录后回复