Metro bundler:错误:EISDIR:对目录的非法操作,读取

Bra*_*ean 19 react-native metro-bundler

当我重新加载我的包时,这个异常未被捕获:

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": "~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
}
Run Code Online (Sandbox Code Playgroud)

Hos*_*adi 7

在 MainApplication.java 中替换此代码

        @Override
        protected String getJSMainModuleName() {
          return "src/index"; <---add this
        }
Run Code Online (Sandbox Code Playgroud)

  • 但对于 IOS 来说如何做到这一点? (6认同)
  • 如果您使用 monorepo(我的情况)并遇到此问题,请将其更改为“packages/my-project/index”之类的内容就像一个魅力。 (4认同)

ill*_*ist 6

IOS版

// packages/myapp/ios/myapp/AppDelegate.m:56
  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"src/index" fallbackResource:nil];
Run Code Online (Sandbox Code Playgroud)


Bra*_*ean 5

显然,转移index.jssrc/index.js. 我将它移回项目根目录,现在工作正常。

  • 在我的项目中,index.js 位于 root 中,但仍然面临问题。任何想法? (14认同)