react-native run-android通过在android仿真器中的消息中保留一条消息来终止。消息如下
无法加载脚本。请确保您正在运行Metro服务器,或者已正确捆绑了软件包“ index.android.bundle”以进行发布。
我完全感到困惑,这是在做错什么。
编辑:添加错误屏幕截图
reactjs react-native react-native-android react-native-cli metro-bundler
我刚刚安装了node.js和cli
安装了react-native-cli
npm -g react-native-cli
Run Code Online (Sandbox Code Playgroud)并创建了一个“新项目”。
react-native init new_project
Run Code Online (Sandbox Code Playgroud)在“ new_project”目录中,我很疲倦地查看Metro bundler是否运行良好。
react-native start
Run Code Online (Sandbox Code Playgroud)但是该命令给了我以下错误,并且Metro无法启动。有任何解决此错误的线索吗?(我正在使用Windows 10 OS。)
C:\projects\new_proj>react-native start
错误无效的正则表达式:/(.\fixtures.|node_modules[]react[]dist[].|website\node_modules.|heapCapture\bundle.js|.\tests。)$/:未终止的字符类。使用--verbose标志运行CLI以获取更多详细信息。SyntaxError:无效的正则表达式:/(..fixtures.|node_modules[]react[]dist[].|website\node_modules.|heapCapture\bundle.js|.\tests.)$/:新RegExp( )在getBlacklistRE(D:\ projects \ new_proj \ node_modules \ react-native \ node_modules @ react-native)的黑名单(D:\ projects \ new_proj \ node_modules \ metro-config \ src \ defaults \ blacklist.js:34:10) getDefaultConfig上的-community \ cli \ build \ tools \ loadMetroConfig.js:69:59)(D:\ projects \ new_proj \ node_modules \ react-native \ node_modules @ react-native-community \ cli \ build \ tools \ loadMetroConfig.js :85:20)在负载(D:
reactjs react-native react-native-android react-native-cli metro-bundler
我正在尝试运行一个使用 Metro Bundler 的现有 React Native 项目。我的操作系统是 Ubuntu 20.04,我尝试在物理 Android 设备和我使用 Android Studio 创建的 Android 模拟器上运行该应用程序。
我已经成功克隆了项目的 repo,安装了它的依赖项 ( yarn
),构建了应用程序 ( react-native run-android
),并在我的手机和模拟器上打开了应用程序。但是,运行react-native start
错误说TypeError: cb.apply is not a function
. 这是我在运行时得到的完整信息和错误react-native start
:
$ react-native start
warn Your project is using deprecated "rnpm" config that will stop working from next release. Please use a "react-native.config.js" file to configure the React Native CLI. Migration guide: https://github.com/react-native-community/cli/blob/master/docs/configuration.md
warn The following packages use deprecated "rnpm" config that …
Run Code Online (Sandbox Code Playgroud) 当我重新加载我的包时,这个异常未被捕获:
Error: EISDIR: illegal operation on a directory, read
at Object.readSync (fs.js:592:3)
at tryReadSync (fs.js:366:20)
at Object.readFileSync (fs.js:403:19)
at UnableToResolveError.buildCodeFrameMessage (/home/brady/obs-websocket-app/node_modules/metro/src/node-haste/DependencyGraph/ModuleResolution.js:347:17)
at new UnableToResolveError (/home/brady/obs-websocket-app/node_modules/metro/src/node-haste/DependencyGraph/ModuleResolution.js:333:35)
at ModuleResolver.resolveDependency (/home/brady/obs-websocket-app/node_modules/metro/src/node-haste/DependencyGraph/ModuleResolution.js:211:15)
at DependencyGraph.resolveDependency (/home/brady/obs-websocket-app/node_modules/metro/src/node-haste/DependencyGraph.js:413:43)
at /home/brady/obs-websocket-app/node_modules/metro/src/lib/transformHelpers.js:317:42
at /home/brady/obs-websocket-app/node_modules/metro/src/Server.js:1471:14
at Generator.next (<anonymous>)
Run Code Online (Sandbox Code Playgroud)
我的 package.json
{
"main": "src/index.js",
"scripts": {
"android": "react-native run-android",
"ios": "react-native run-ios",
"web": "expo start --web",
"start": "react-native start",
"test": "jest"
},
"dependencies": {
"@types/node": "^14.14.35",
"events": "^3.3.0",
"expo": "~40.0.0",
"expo-splash-screen": "~0.8.0",
"expo-updates": "~0.4.0",
"obs-websocket-js": "^4.0.2",
"react": "16.13.1",
"react-dom": "16.13.1",
"react-native": …
Run Code Online (Sandbox Code Playgroud) 我正在尝试弄清楚 React Native 的构建过程以及 Metro 捆绑器和 babeljs 到底做了什么。特别是允许我使用 ES5+ 语法。我发现一些消息来源似乎告诉我一些不同的事情。这消息来源说:
\n\n\n\n\nMetro 将所有 javascript 代码合并到一个文件中,并翻译\n 设备无法理解的任何 Javascript 代码(例如 JSX 或一些\n 较新的 javascript 语法)
\n
这个说:
\n\n\n\n\nReact Native 使用 Babel 将 React 语法和较新的 ES5+\n 语法转换为可以在不支持这些功能的 JavaScript 环境中运行的代码。
\n
所以现在我很困惑两者到底做了什么。我还在上面的源代码(和 Metro 文档)中找到了这一点:\n Metro。变换过程描述为:
\n\n\n\n\n所有模块都经过变压器。转换器负责将模块转换为目标平台可以理解的格式(例如 React Native)。模块的转换根据您拥有的核心数量并行进行。
\n
这听起来和 babel 应该对我做的转译一模一样,或者这是不同的东西?除此之外,我对捆绑过程的解决部分的工作原理以及它与其他步骤并行工作的确切方式感到困惑,但这也许是另一个问题的主题。
\n是否已经可以在 react-native 中使用顶级 await?我看到它已被添加到 TypeScript 3.8(我没有使用 TS,我只是想看看它是否有帮助,但没有)。然而,在 react-native 文件转换是由 babel 处理的,我认为当前的 Metro 预设不能处理顶级等待。有没有办法让它工作?
问题:当我运行远程调试器时,metro 服务器表示找不到该文件。
Error: ENOENT: no such file or directory, open '/home/hery/Workspace/NyTiona/http:/localhost:8081/index.bundle?platform=android&dev=true&minify=false&app=com.nytiona&modulesOnly=false&runModule=true'
at Object.openSync (fs.js:498:3)
at Object.readFileSync (fs.js:394:35)
at getCodeFrame (/home/hery/Workspace/NyTiona/node_modules/metro/src/Server.js:919:18)
at Server._symbolicate (/home/hery/Workspace/NyTiona/node_modules/metro/src/Server.js:992:22)
at processTicksAndRejections (internal/process/task_queues.js:95:5)
at async Server._processRequest (/home/hery/Workspace/NyTiona/node_modules/metro/src/Server.js:403:7) {
errno: -2,
syscall: 'open',
code: 'ENOENT',
path: '/home/hery/Workspace/NyTiona/http:/localhost:8081/index.bundle?platform=android&dev=true&minify=false&app=com.nytiona&modulesOnly=false&runModule=true'
}
Run Code Online (Sandbox Code Playgroud)
注意: 无论我使用 USB 还是 Wi-Fi,都会出现此错误。
信息: 我的反应本机信息
System:
OS: Linux 5.4 Ubuntu 20.04.3 LTS (Focal Fossa)
CPU: (4) x64 Intel(R) Core(TM) i5-4200U CPU @ 1.60GHz
Memory: 1.51 GB / 7.49 GB
Shell: 5.0.17 - /bin/bash
Binaries:
Node: 14.17.2 - …
Run Code Online (Sandbox Code Playgroud) 刚刚将我的 Mac 更新到 Ventura 官方版本,但我无法通过react-native run-ios
.
预期行为:
\n运行react-native run-ios
将启动 Xcode 模拟器和运行 Metro 的终端窗口。
当前行为:
\nXcode 模拟器打开,主终端显示应用程序已成功构建,但抛出错误而不是 Metro 终端打开:
\n\n\n\xe2\x80\x9claunchPackager.command\xe2\x80\x9d 无法打开\xe2\x80\x99,因为 (null) 不允许在终端中打开文档。
\n
模拟器只显示白屏,无法交互。
\n我尝试过的:
\nnode_modules/react-native/scripts/launchPackager.command
\n\n\n警告 没有连接应用程序。向所有 React Native 应用程序发送“重新加载”失败。确保您的应用程序正在模拟器中或通过 USB 连接的手机上运行。\ninfo 正在重新加载应用程序...
\n
React Native app 在真机上调试有一些问题;
我的 Metro bundler 控制台发出警告:
warn No apps connected. Sending "reload" to all React Native apps failed. Make sure your app is running in the simulator or on a phone connected via USB.
Run Code Online (Sandbox Code Playgroud)
警告并导致真正的 IOS 设备连接问题。
当我尝试从 Chrome React Native Debugger 重新加载我的 React Native 应用程序时,它给出了上述警告,我无法在 Chrome 上调试我的代码
反应原生:0.62.2,
IOS:13.6
它发生在真实设备连接上。当我使用 IOS 模拟器时,没有问题。
注意:我的手机和 macbook 使用相同的 Wi-Fi 网络。
所以问题与不同的 wi-fi 网络使用无关。
我有一个非常奇怪的问题,我无法解决。我也不知道如何谷歌这个,因为虽然我熟悉 React Native,但我不熟悉 Android 本身,也不知道我的搜索词应该是什么。
network_security_config.xml
因此,在我的 React Native 代码中,我的客户端在路径下添加了以下文件android/app/src/main/res/xml
:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">_my_clients_ip</domain>
</domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)
因此,他们在路径AndroidManifest.xml
文件中添加了以下内容android/app/src/main
:
.
.
<application
.
.
android:networkSecurityConfig="@xml/network_security_config"
</application>
.
.
Run Code Online (Sandbox Code Playgroud)
上面的点表示其他属性和标签,为简洁起见,我省略了这些属性和标签。
我的问题
我正在使用 Android 模拟器来测试我的 React Native 应用程序。
在上面的 xml 不存在之前,我的 React Native 应用程序运行良好。但是,通过上述添加,当我使用命令启动我的 React Native 应用程序时(在 2 个不同的终端中):
$ npx react-native start --reset-cache
$ npx react-native run-android
Run Code Online (Sandbox Code Playgroud)
该应用程序在模拟器中加载 - 但它似乎与metro捆绑器断开连接(终端运行npx react-native start --reset-cache
)。
我尝试r
在此终端中按 键来检查重新加载是否有效,并输出:
warn No apps connected. …
Run Code Online (Sandbox Code Playgroud) metro-bundler ×10
react-native ×10
android ×2
babeljs ×2
reactjs ×2
typescript ×2
async-await ×1
debugging ×1
javascript ×1
macos ×1