【问题标题】:React native is stuck at old version appReact native 卡在旧版本应用程序中
【发布时间】:2017-07-13 08:00:14
【问题描述】:

当我运行 react-native run-android 时,它只会在模拟器中安装旧版本的应用程序,并且不会显示更改。

欢迎提出任何建议。

【问题讨论】:

  • 删除旧版本,构建新版本然后安装。
  • 我这样做了,但还是有问题。

标签: react-native


【解决方案1】:

似乎每次将资源编译到 Android 应用程序时,我们都必须重新捆绑资源。这对我有用:

  1. 首先运行这个:

    react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
    
  2. 然后这个:

    react-native run-android
    

【讨论】:

  • 谢谢!这完全奏效了。几个星期以来,我一直在努力解决这个问题。我注意到它删除了所有创建的符号链接。我在某处读到这些符号链接是由 Xcode 构建创建的。我手动删除了所有这些符号链接,并让我的应用程序使用最新代码进行编译。很高兴知道这也会这样做。我已设置为 bash 别名以供将来使用。
  • 我试过了,但我似乎丢失了所有图像文件。
【解决方案2】:

你试过react-native start --reset-cache吗?

或者你可以尝试重置MAX_WAIT_TIME(我找到了here)。 在文件\node_modules\node-haste\lib\FileWatcher\index.js 您应该增加MAX_WAIT_TIME 变量(例如:360000)并更改函数_createWatcher.

发件人:

key: '_createWatcher',
value: function _createWatcher(rootConfig) {
  var watcher = new WatcherClass(rootConfig.dir, {
    glob: rootConfig.globs,
    dot: false
  });
  return new Promise(function (resolve, reject) {
    var rejectTimeout = setTimeout(function () {
      return reject(new Error(timeoutMessage(WatcherClass)));
    }, MAX_WAIT_TIME);
    watcher.once('ready', function () {
      clearTimeout(rejectTimeout);
      resolve(watcher);
    });
  });
}

收件人:

key: '_createWatcher',
value: function _createWatcher(rootConfig) {
  var watcher = new WatcherClass(rootConfig.dir, {
    glob: rootConfig.globs,
    dot: false
  });

  return new Promise(function (resolve, reject) {

    const rejectTimeout = setTimeout(function() {
      reject(new Error([
        'Watcher took too long to load',
        'Try running `watchman version` from your terminal',
        'https://facebook.github.io/watchman/docs/troubleshooting.html',
      ].join('\n')));
    }, MAX_WAIT_TIME);

    watcher.once('ready', function () {
      clearTimeout(rejectTimeout);
      resolve(watcher);
    });
  });
}

希望对您有所帮助! :D

【讨论】:

  • 对我来说这很有效。但在我不得不用命令sudo lsof -i :8081杀死应用程序侦听端口8081之前
【解决方案3】:

尝试使用上述解决方案,不确定它们是否有助于最终版本,但最终有效的是在 /android 文件夹中运行 ./gradlew clean assembleRelease

【讨论】:

    【解决方案4】:

    检查 VS 代码可能未突出显示的任何语法错误。

    在拉我的头发三个小时后,我发现它没有提醒我注意对象中的 = 而不是 :

    【讨论】:

      【解决方案5】:

      我在使用 iOS 时遇到了这种情况,以下是我为恢复正常工作而采取的步骤:

      $ react-native start --reset-cache
      $ rm -rf ios/build
      

      当您运行 yarn ios 时,单独执行这些操作将迫使 RN 从头开始​​重建 iOS 版本,因此对于大多数其他运行 iOS 的人来说,这可能是答案。

      在我最近遇到的这个问题中,我发现在强制新构建后,metro-bundler 会抛出以下错误:Metro Bundler 遇到错误:SHA-1 for file

      有了这个,我必须刷新我的 node_modules 才能完全解决问题。

      $ rm -r node_modules
      $ yarn
      

      【讨论】:

        【解决方案6】:

        对我来说,我只是重新启动了我的系统。或者干脆停止 react-native 服务器,然后重新运行您的应用。

        【讨论】:

          【解决方案7】:

          通过从图标栏拖动来使用 expo 的重新加载选项

          【讨论】:

            【解决方案8】:

            解决此问题的另一种方法是在 Web 浏览器控制台中运行此命令。我在使用 React Native for Windows 时遇到了这个问题,并且上述解决方案都不适用于我。

            localStorage.clear()
            

            【讨论】:

              【解决方案9】:

              问题是 projectroot > ios > main.jsbundle 没有像它应该随着代码更改/构建而更新。要获取最新信息,请删除该文件。然后在终端(只在这里,不依赖自动创建),放: react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios/assets

              这将创建一个当前的 main.jsbundle,用于创建应用程序以及用于创建存档的内容。问题是,如果你更新你的代码,你必须再做一次。

              如果需要,您可以手动编辑 main.jsbundle。我必须对其进行调整,以便在我有多层文件夹/页面时显示我的一些图像。不难,只需搜索您的图片名称并查看/编辑链接即可。

              【讨论】:

                【解决方案10】:

                这是我的调试/发布解决方案 注: - 如果您使用的是 expo - 这可能不适用。

                yarn android:bundle:debug 应该得到最新的调试版本... 假设您使用 index.js 作为主要入口点。

                将这些添加到您的 package.json 中

                 "scripts": {
                    "android": "npx react-native run-android",
                    "android:bundle:debug": "react-native bundle --platform android --dev true --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/",
                    "android:bundle:release": "react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/build/intermediates/res/merged/release/",
                   }
                

                release.sh

                yarn android:bundle:release
                cd android
                ./gradlew bundleRelease
                cd app/build/outputs/bundle/release
                open .
                

                【讨论】:

                  猜你喜欢
                  • 2020-08-06
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-08-09
                  • 2019-12-17
                  • 1970-01-01
                  • 2016-03-16
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多