Metro捆绑程序:错误:EISDIR:对目录的非法操作,读取



当我重新加载捆绑包时,未捕获此异常:

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>)

我的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": "~0.64.0",
"react-native-elements": "^3.3.2",
"react-native-gesture-handler": "~1.8.0",
"react-native-reanimated": "~1.13.0",
"react-native-screens": "~2.15.0",
"react-native-unimodules": "~0.12.0",
"react-native-web": "~0.13.12"
},
"devDependencies": {
"@babel/core": "~7.9.0",
"@types/react": "~16.9.35",
"@types/react-dom": "~16.9.8",
"@types/react-native": "~0.63.2",
"babel-preset-expo": "~8.3.0",
"jest-expo": "~40.0.0",
"typescript": "~4.0.0"
},
"jest": {
"preset": "react-native"
},
"private": true
}

在`MainApplication.java 中替换此代码

@Override
protected String getJSMainModuleName() {
return "src/index"; <---add this
}

对于IOS

// packages/myapp/ios/myapp/AppDelegate.m:56
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"src/index" fallbackResource:nil];

显然,将index.js移动到src/index.js有问题。我把它移回了项目根目录,现在它运行得很好。

通过删除和创建新的android模拟器来解决。。。

我得到了同样的错误,但在我yarn global remove wml之后一切都很顺利

yarn global remove wml

拯救了我的生命

如果您从未安装过wml,只需考虑其他一些相关的全局libs

----更新-----即使我卸载了wml工作人员,我也再次出现错误,但我发现问题的根本原因是watchman,在运行brew uninstall watchman后,一切正常

运行的远程调试器的一个旧实例导致了我的这种情况;"为什么";,但是,如果您想以编程方式终止调试器,请将其添加到App.tsx的顶部,或者添加到任何顶级入口文件中:

import { NativeModules } from 'react-native';
NativeModules.DevSettings.setIsDebuggingRemotely(false);

Christophe Marois回答了这个问题如何在React Native 中禁用远程JS调试

如果您将create-react-native-library用于本机模块并收到此错误。执行以下操作:

  1. cd example
  2. npx react-native start
  3. 在rootDir中,yarn example run

最新更新