Unable to find AppEntry after upgrade from SDK 40

Please provide the following:

  1. SDK Version: 43 (also tried 44)
  2. Platforms(Android/iOS/web/all): Android/iOS
  3. Add the appropriate “Tag” based on what Expo library you have a question on.

After upgrading from expo 40, I’ve followed the migration guides for 41, 42, and 43. I added a metro.config.js to include bundling support for an additional filetype and now it appears metro can’t find the path to AppEntry, as upon starting the expo server I’m getting the following error:

Error: ENOENT: no such file or directory, open '$pathToProjectRoot/http:/127.0.0.1:19000/node_modules/expo/AppEntry.bundle?platform=ios&dev=true&hot=false&minify=false'
    at Object.openSync (fs.js:476:3)
    at Object.readFileSync (fs.js:377:35)
    at getCodeFrame (/$pathToProjectRoot/node_modules/metro/src/Server.js:918:18)
    at Server._symbolicate ($pathToProjectRoot/node_modules/metro/src/Server.js:990:22)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at Server._processRequest ($pathToProjectRoot/node_modules/metro/src/Server.js:403:7) {
  errno: -2,
  syscall: 'open',
  code: 'ENOENT',
  path: '$pathToProjectRoot/http:/127.0.0.1:19000/node_modules/expo/AppEntry.bundle?platform=ios&dev=true&hot=false&minify=false'

What jumps out to me as weird is how it’s looking at $pathToProjectRoot/http:/127.0.0.1, both because it’s appending http:/127.0.0.1 to the project root, as opposed to just looking at 127.0.0.1:19000/node_modules.... Additionally, not sure why it’s http:/ and not http://

I’ve also tried setting the projectRoot field within metro.config.js and it doesn’t seem to have any effect.

here’s my package.json:

{
  "name": $name,
  "version": "5.4.0",
  "private": true,
  "devDependencies": {
    "@babel/preset-flow": "^7.0.0",
    "@expo/metro-config": "^0.3.9",
    "@pmmmwh/react-refresh-webpack-plugin": "^0.3.3",
    "@semantic-release/changelog": "^5.0.1",
    "@semantic-release/commit-analyzer": "^8.0.1",
    "@semantic-release/git": "^9.0.0",
    "@semantic-release/npm": "^7.0.6",
    "@semantic-release/release-notes-generator": "^9.0.1",
    "@storybook/addon-actions": "^5.1.10",
    "@storybook/addon-knobs": "^5.1.11",
    "@storybook/addon-links": "^5.1.10",
    "@storybook/addon-ondevice-knobs": "^5.1.10",
    "@storybook/react-native": "^5.1.10",
    "@storybook/theming": "^5.1.10",
    "@testing-library/jest-native": "^4.0.1",
    "@testing-library/react-native": "^7.2.0",
    "@types/react": "~17.0.21",
    "babel-eslint": "^10.1.0",
    "babel-preset-expo": "8.5.1",
    "babel-preset-flow": "^6.23.0",
    "conventional-changelog-conventionalcommits": "^4.5.0",
    "emotion-theming": "^10.0.14",
    "eslint": "7.22.0",
    "eslint-config-airbnb": "18.2.1",
    "eslint-plugin-flowtype": "^2.45.0",
    "eslint-plugin-import": "2.22.1",
    "eslint-plugin-jest": "^24.3.2",
    "eslint-plugin-jsx-a11y": "6.4.1",
    "eslint-plugin-react": "7.23.1",
    "eslint-plugin-react-hooks": "^4.2.0",
    "flow-bin": "0.56.0",
    "jest-expo": "~43.0.1",
    "jscodeshift": "^0.11.0",
    "metro": "^0.65.2",
    "react-dom": "17.0.1",
    "react-native-dotenv": "^0.2.0",
    "react-test-renderer": "^17.0.2",
    "semantic-release": "^17.2.3",
    "semantic-release-expo": "^2.2.3",
    "webpack": "^4.41.6",
    "webpack-dev-server": "^3.11.0",
    "webpack-hot-middleware": "^2.25.0",
    "webpack-plugin-serve": "^1.0.0"
  },
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "eject": "expo eject",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "build:ios-dev": "expo build:ios --release-channel dev",
    "build:android-dev": "expo build:android --release-channel dev",
    "build:ios-staging": "expo build:ios --release-channel staging",
    "build:android-staging": "expo build:android --release-channel staging",
    "build:ios-production": "expo build:ios --release-channel production",
    "build:android-production": "expo build:android --release-channel production",
    "test": "jest",
    "storybook": "storybook start -p 7007",
    "flow start": "flow start",
    "flow stop": "flow stop",
    "flow status": "flow status",
    "flow coverage": "flow coverage",
    "graphql-fragments": "node --experimental-modules src/common/graphql/introspectionFragmentMatcher",
    "eslint": "./node_modules/.bin/eslint .",
    "eslint:fix": "./node_modules/.bin/eslint . --fix"
  },
  "jest": {
    "preset": "jest-expo"
  },
  "release": {
    "verifyConditions": [
      "semantic-release-expo",
      "@semantic-release/changelog",
      "@semantic-release/git",
      "@semantic-release/github",
      "@semantic-release/npm"
    ],
    "analyzeCommits": [
      [
        "@semantic-release/commit-analyzer",
        {
          "preset": "conventionalcommits"
        }
      ]
    ],
    "generateNotes": [
      [
        "@semantic-release/release-notes-generator",
        {
          "preset": "conventionalcommits"
        }
      ]
    ],
    "prepare": [
      "semantic-release-expo",
      "@semantic-release/changelog",
      "@semantic-release/npm",
      {
        "path": "@semantic-release/git",
        "assets": [
          "CHANGELOG.md",
          "package.json",
          "package-lock.json",
          "app.json"
        ],
        "versions": {
          "version": "${next.raw}",
          "android": "${code}",
          "ios": "${next.raw}"
        }
      }
    ],
    "publish": false,
    "success": false,
    "fail": false
  },
  "dependencies": {
    "@apollo/client": "^3.3.13",
    "@apollo/react-testing": "^4.0.0",
    "@babel/core": "^7.12.9",
    "@commitlint/cli": "^9.0.1",
    "@commitlint/config-conventional": "^12.0.0",
    "@emotion/core": "^10.0.15",
    "@emotion/native": "^10.0.14",
    "@expo/vector-icons": "^12.0.0",
    "@optimizely/js-sdk-event-processor": "^0.6.0",
    "@optimizely/react-sdk": "^2.0.0-alpha.1",
    "@react-native-async-storage/async-storage": "~1.15.0",
    "@react-native-community/masked-view": "0.1.10",
    "@react-native-community/netinfo": "6.0.2",
    "@react-native-community/toolbar-android": "0.1.0-rc.2",
    "@react-navigation/core": "^5.12.4",
    "@react-navigation/material-bottom-tabs": "^5.2.18",
    "@react-navigation/native": "^5.7.5",
    "@react-navigation/stack": "^5.2.9",
    "@react-navigation/web": "^1.0.0-alpha.9",
    "@sentry/react-native": "^2.2.1",
    "apollo-link-logger": "2.0.0",
    "apollo-upload-client": "^16.0.0",
    "babel-cli": "6.26.0",
    "color": "3.0.0",
    "color-hash": "^1.0.3",
    "core-js": "^3.9.1",
    "date-fns": "1.29.0",
    "date-fns-timezone": "^0.1.4",
    "expo": "^43.0.0",
    "expo-app-loading": "~1.2.1",
    "expo-application": "~4.0.0",
    "expo-barcode-scanner": "~11.1.2",
    "expo-camera": "~12.0.3",
    "expo-constants": "~12.1.3",
    "expo-device": "~4.0.3",
    "expo-file-system": "~13.0.3",
    "expo-font": "~10.0.3",
    "expo-image-manipulator": "~10.1.2",
    "expo-image-picker": "~11.0.3",
    "expo-linking": "~2.4.2",
    "expo-modules-core": "~0.4.10",
    "expo-notifications": "~0.13.3",
    "expo-permissions": "~13.0.3",
    "expo-updates": "~0.10.15",
    "expo-web-browser": "~10.0.3",
    "graphql": "^15.5.0",
    "history": "^4.10.1",
    "husky": "^4.2.5",
    "json2csv": "^4.5.4",
    "lodash": "^4.17.21",
    "lodash.groupby": "4.6.0",
    "memoize-one": "^5.0.5",
    "node-fetch": "2.6.1",
    "prettier": "1.14.0",
    "prettier-eslint": "6.4.3",
    "prop-types": "15.6.2",
    "ramda": "^0.26.1",
    "react": "17.0.1",
    "react-hot-loader": "^4.12.20",
    "react-native": "0.64.3",
    "react-native-collapsible": "0.10.0",
    "react-native-easy-grid": "^0.2.2",
    "react-native-gesture-handler": "~1.10.2",
    "react-native-image-view": "^2.1.9",
    "react-native-modal": "5.4.0",
    "react-native-modal-selector": "^2.1.0",
    "react-native-multiple-select": "^0.5.3",
    "react-native-paper": "^3.0.0",
    "react-native-picker-select": "8.0.4",
    "react-native-raw-bottom-sheet": "^2.2.0",
    "react-native-safe-area-context": "3.3.2",
    "react-native-screens": "~3.8.0",
    "react-native-svg": "~9.4.0",
    "react-native-swipe-list-view": "2.0.0",
    "react-native-vector-icons": "^6.7.0",
    "react-native-webview": "11.13.0",
    "react-navigation-tabs": "2.3.0",
    "react-refresh": "^0.8.3",
    "react-router-dom": "^5.1.2",
    "react-router-native": "^5.1.2",
    "sentry-expo": "^4.0.0",
    "sockjs-client": "^1.5.0",
    "subscriptions-transport-ws": "^0.10.0",
    "type-fest": "^0.13.1",
    "victory": "^32.3.3",
    "victory-native": "^31.0.0"
  },
  "husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
  },
  "commitlint": {
    "extends": [
      "@commitlint/config-conventional"
    ],
    "rules": {
      "subject-case": [
        2,
        "never",
        [
          "start-case",
          "pascal-case"
        ]
      ]
    }
  }
}

Hi @danpettay

I’ve just got the same errors when trying to run the Native Component List app. Haven’t done any troubleshooting yet.

Is your app in a monorepo by any chance?

Hi @wodin, thanks for the reply. Yeah, the app is in a monorepo, but it’s kind of a legacy thing as we used to have a react-native-web project in our repo but have since moved away from it since RNW had a number of issues for us. I can try changing up the dir structure to avoid this. Do you hypothesize that the monorepo structure is problematic?

It’s just a wild guess, since the first time I saw the problem was with an app that’s in a monorepo.

I was able to get around this by making the following adjustment to node_modules/metro/src/Server.js within the _symbolicate method on line 909:
const entryPoint = file.substring(0, 7) === 'http://' ? file : path.resolve(this._config.projectRoot, file);

Feel like there’s gotta be a better solution but this works for now

1 Like

Are you able to reproduce it in a new app? If so, I suspect they would appreciate a bug report.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.