Bundler 不会自动加载(No bundle URL present error)
Bundler does not load automatically (No bundle URL present error)
将我的 React Native 应用程序更新到最新版本 (0.60.4
) 后,使用 react-native run-ios
启动我的应用程序将导致我的应用程序在没有 Metro Bundler 的情况下启动。
应用程序随后会显示以下错误:
为了让我的应用程序正常运行,我需要使用 npm start
和 运行 react-native run-ios
启动 Metro Bundler。
虽然这是一个解决方法,但以前我没有遇到过这个问题,只需 运行ning react-native run-ios
就会自动启动 Metro Bundler。我该如何解决?
编辑: 我的 NSAppTransportSecurity
来自 Info.plist
:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>localhost</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
按照以下步骤操作。我也遇到过这个问题,解决方法是:
- 将你的 react native cli 更新到最新版本。
- 如果使用 androidX,请使用 jetifier 和 npx。
- 更新您的包JSON,其中的开发依赖项如下所示
"devDependencies": {
"@babel/core": "^7.4.3",
"@babel/runtime": "^7.4.3",
"babel-jest": "^24.7.1",
"jest": "^24.7.1",
"metro-react-native-babel-preset": "^0.53.1",
"react-test-renderer": "16.8.3"
},
启动 metro bundler 需要四处走动。
使用 : npm start --reset cache
这将启动你的 metro bundler。
我想这个问题在将现有项目升级到 React Native 时很常见 v0.60.+
。
对于在 Mac 上遇到此问题的任何人:
- 打开
Xcode
并在您的项目下找到 Build Phases
。
- 点击
Editor
-> Add Build Phase
-> Add Run Script Build Phase
。
- 点击
Build Phases
选项卡底部新生成的 Run Script
。
- 粘贴以下代码:
export RCT_METRO_PORT="${RCT_METRO_PORT:=8081}"
echo "export RCT_METRO_PORT=${RCT_METRO_PORT}" > "${SRCROOT}/../node_modules/react-native/scripts/.packager.env"
if [ -z "${RCT_NO_LAUNCH_PACKAGER+xxx}" ] ; then
if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then
if ! curl -s "http://localhost:${RCT_METRO_PORT}/status" | grep -q "packager-status:running" ; then
echo "Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly"
exit 2
fi
else
open "$SRCROOT/../node_modules/react-native/scripts/launchPackager.command" || echo "Can't start packager automatically"
fi
fi
- 通过
Xcode
启动您的项目。 Metro Bundler
现在应该会自动启动。
- 保存更改后,下次您在终端中 运行
react-native run-ios
时,Metro Bundler
将自动启动并且 No bundle URL present
错误将不再存在。
将我的 React Native 应用程序更新到最新版本 (0.60.4
) 后,使用 react-native run-ios
启动我的应用程序将导致我的应用程序在没有 Metro Bundler 的情况下启动。
应用程序随后会显示以下错误:
为了让我的应用程序正常运行,我需要使用 npm start
和 运行 react-native run-ios
启动 Metro Bundler。
虽然这是一个解决方法,但以前我没有遇到过这个问题,只需 运行ning react-native run-ios
就会自动启动 Metro Bundler。我该如何解决?
编辑: 我的 NSAppTransportSecurity
来自 Info.plist
:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>localhost</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
按照以下步骤操作。我也遇到过这个问题,解决方法是:
- 将你的 react native cli 更新到最新版本。
- 如果使用 androidX,请使用 jetifier 和 npx。
- 更新您的包JSON,其中的开发依赖项如下所示
"devDependencies": {
"@babel/core": "^7.4.3",
"@babel/runtime": "^7.4.3",
"babel-jest": "^24.7.1",
"jest": "^24.7.1",
"metro-react-native-babel-preset": "^0.53.1",
"react-test-renderer": "16.8.3"
},
启动 metro bundler 需要四处走动。
使用 : npm start --reset cache
这将启动你的 metro bundler。
我想这个问题在将现有项目升级到 React Native 时很常见 v0.60.+
。
对于在 Mac 上遇到此问题的任何人:
- 打开
Xcode
并在您的项目下找到Build Phases
。 - 点击
Editor
->Add Build Phase
->Add Run Script Build Phase
。 - 点击
Build Phases
选项卡底部新生成的Run Script
。 - 粘贴以下代码:
export RCT_METRO_PORT="${RCT_METRO_PORT:=8081}"
echo "export RCT_METRO_PORT=${RCT_METRO_PORT}" > "${SRCROOT}/../node_modules/react-native/scripts/.packager.env"
if [ -z "${RCT_NO_LAUNCH_PACKAGER+xxx}" ] ; then
if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then
if ! curl -s "http://localhost:${RCT_METRO_PORT}/status" | grep -q "packager-status:running" ; then
echo "Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly"
exit 2
fi
else
open "$SRCROOT/../node_modules/react-native/scripts/launchPackager.command" || echo "Can't start packager automatically"
fi
fi
- 通过
Xcode
启动您的项目。Metro Bundler
现在应该会自动启动。 - 保存更改后,下次您在终端中 运行
react-native run-ios
时,Metro Bundler
将自动启动并且No bundle URL present
错误将不再存在。