Can't upgrade from SDK 33 to SDK 34 - Attempting to change the getter of an unconfigurable property

Please provide the following:

  1. SDK Version: 33, trying to upgrade to 34
  2. Platforms(Android/iOS/web/all): Android / iOS

Despite an entire day of efforts of our three senior engineers, we’re unable to upgrade from Expo’s SDK 33 to SDK 34, hitting on this wall:

We tried taking it as far as SDK 36, but we always face the same red exception, and our App never gets to load.

Any ideas on how to debug this? The error message is cryptic and the only thing we can find on Google that is not 3+ years old is When Hot reloading is enabled, Requiring a component fails with TypeError: Attempting to change the getter of an unconfigurable property · Issue #22592 · facebook/react-native · GitHub, but it’s supposedly fixed in React Native 0.61, which SDK 36 has, so it’s not the same bug (and we have Fast Refresh turned off).

1 Like

Just started to happen to me too today. I ran expo install expo-facebook and that was the end of that. I’ve clearer the metro cache, yarn cache, watchman, re-ran expo init, deleted all node_modules and reinstalled with yarn (then did it all again with npm). No success.

I’m on expo version 36 and I went back in my GIT history but that hasn’t fixed it either. Feels like a cache issue… Will report back if anything changes.

PS:
I also deleted the Expo app from my iPhone using the iPhone storage in settings.
I also ran this: React-Native clear Watchman + Cache · GitHub
I also tried this: Script to clean watchman, remove node_modules, clean cache and restart packager for React Native troubleshooting. · GitHub

My friend who has the same code base runs the code and it builds fine.

Hi

Not sure I have any useful suggestions, except try removing anything in $TMPDIR to do with react native or haste as well, and check for processes listening on ports 19000-19010 and kill them if they look like they are related to Expo/react native as well (not port 8081 as in the second link.)

Thanks @wodin I tried that without luck.

I’ve also created an entirely new project, ran expo init and moved my files into that new folder. Still getting the same error.

If I run a brand new expo project without my code everything works okay.

I then copied my old package.json into the new project (not the code, just the package.json) and ran yarn in the folder. After doing this, I get the error that @dev_temporadalivre posted above. Seems like something is wrong with my package.json.

Will keep investigating and will post updates here.

1 Like

Turns out that it was one of the packages that I had added to my package.json. Although I had added it a long time ago, it appears that it hadn’t installed correctly that time. The package that caused it was
"@unimodules/core": "~1.0.0"

1 Like

Hi all!

I am also facing this issue in the same conditions as the thread title - my app is currently on sdk 33 and can’t update to any sdk above that… Tried upgrading 34, 35 and 36, all with workspace nuking workflow (clearing all possible caches, deleting and installing node_modules, etc) but without luck.

Additionally, my package.json doesn’t have "@unimodules/core": "~1.0.0" as @adriaanbalt stated and no @unimodules mention at all, but it is there on my node_modules. I will keep trying to find the offending package and post any findings I may have here. Meanwhile, I’ll leave my package.json contents of SDKs 33 (working) and 36 (not working):

SDK 33

{
  "name": "undisclosed",
  "main": "node_modules/expo/AppEntry.js",
  "private": true,
  "scripts": {
    "start": "expo start",
    "ios": "expo start --ios",
    "android": "expo start --android",
    "reset": "cp .env-sample .env && expo start -c",
    "build-ios": "cp .env-sample .env && expo bi",
    "build-android": "cp .env-sample .env && expo ba",
    "eject": "expo eject",
    "lint-src": "eslint src --no-ignore --max-warnings 0",
    "lint-test": "eslint test --no-ignore --max-warnings 0",
    "test": "jest"
  },
  "dependencies": {
    "@ptomasroos/react-native-multi-slider": "^1.0.0",
    "@react-native-community/netinfo": "~2.0.10",
    "expo": "^33.0.0",
    "expo-asset": "~5.0.0",
    "expo-constants": "~5.0.1",
    "expo-facebook": "~5.0.1",
    "expo-font": "~5.0.1",
    "expo-image-manipulator": "~5.0.1",
    "expo-image-picker": "~5.0.2",
    "expo-linear-gradient": "~5.0.1",
    "expo-localization": "~5.0.1",
    "expo-location": "~5.0.1",
    "expo-multiple-media-imagepicker": "^1.2.1",
    "expo-permissions": "~5.0.1",
    "i18n-js": "^3.3.0",
    "libphonenumber-js": "^1.7.10",
    "lodash": "^4.17.14",
    "moment": "^2.23.0",
    "native-base": "2.12.1",
    "numeral": "^2.0.6",
    "prop-types": "^15.6.2",
    "react": "16.8.3",
    "react-native": "https://github.com/expo/react-native/archive/sdk-33.0.1.tar.gz",
    "react-native-actionsheet": "^2.4.2",
    "react-native-autocomplete-input": "^4.1.0",
    "react-native-banner-carousel": "^1.0.3",
    "react-native-calendario": "^0.2.5",
    "react-native-deck-swiper": "1.5.25",
    "react-native-dialog-input": "^1.0.6",
    "react-native-dotenv": "^0.2.0",
    "react-native-dynamic-tab-view": "^1.0.7-0",
    "react-native-elements": "^0.19.1",
    "react-native-gesture-handler": "~1.2.1",
    "react-native-google-places-autocomplete": "^1.3.9",
    "react-native-keyboard-spacer": "^0.4.1",
    "react-native-loading-spinner-overlay": "^1.0.1",
    "react-native-maps": "~0.24.0",
    "react-native-masked-text": "^1.9.2",
    "react-native-material-dropdown": "^0.11.1",
    "react-native-modal": "^7.0.1",
    "react-native-modalbox": "^1.6.0",
    "react-native-snap-carousel": "^3.8.1",
    "react-native-step-indicator": "0.0.9",
    "react-native-svg": "~9.4.0",
    "react-native-swipe-list-view": "^2.0.1",
    "react-native-switch-selector": "^1.1.10",
    "react-native-timeline-listview": "^0.2.3",
    "react-native-vector-icons": "^6.6.0",
    "react-navigation": "^2.18.2",
    "react-redux": "^5.1.1",
    "redux": "^4.0.1",
    "redux-persist": "^5.10.0",
    "redux-thunk": "^2.3.0",
    "rn-viewpager": "^1.2.9",
    "superagent": "^4.1.0"
  },
  "devDependencies": {
    "babel-eslint": "^10.0.3",
    "babel-preset-expo": "^6.0.0",
    "enzyme": "^3.10.0",
    "enzyme-adapter-react-16": "^1.14.0",
    "eslint": "^6.3.0",
    "eslint-plugin-jest": "^22.16.0",
    "eslint-plugin-react": "^7.14.3",
    "eslint-plugin-react-native": "^3.7.0",
    "jest-expo": "^33.0.0",
    "jest-plugin-context": "^2.9.0",
    "react-dom": "16.8.3",
    "react-native-testing-library": "^1.11.1",
    "react-test-renderer": "16.5.0",
    "reactotron-react-native": "^2.1.4",
    "reactotron-redux": "^2.1.3",
    "redux-mock-store": "^1.5.3",
    "superagent-mock": "^3.7.0"
  }
}

SDK 36

{
  "name": "undisclosed",
  "main": "node_modules/expo/AppEntry.js",
  "private": true,
  "scripts": {
    "start": "expo start",
    "ios": "expo start --ios",
    "android": "expo start --android",
    "reset": "cp .env-sample .env && expo start -c",
    "build-ios": "cp .env-sample .env && expo bi",
    "build-android": "cp .env-sample .env && expo ba",
    "eject": "expo eject",
    "lint-src": "eslint src --no-ignore --max-warnings 0",
    "lint-test": "eslint test --no-ignore --max-warnings 0",
    "test": "jest"
  },
  "dependencies": {
    "@ptomasroos/react-native-multi-slider": "^1.0.0",
    "@react-native-community/netinfo": "4.6.0",
    "expo": "^36.0.0",
    "expo-asset": "~8.0.0",
    "expo-constants": "~8.0.0",
    "expo-facebook": "~8.0.0",
    "expo-font": "~8.0.0",
    "expo-image-manipulator": "~8.0.0",
    "expo-image-picker": "~8.0.1",
    "expo-linear-gradient": "~8.0.0",
    "expo-localization": "~8.0.0",
    "expo-location": "~8.0.0",
    "expo-multiple-media-imagepicker": "^1.2.1",
    "expo-permissions": "~8.0.0",
    "i18n-js": "^3.3.0",
    "libphonenumber-js": "^1.7.10",
    "lodash": "^4.17.14",
    "moment": "^2.23.0",
    "native-base": "2.12.1",
    "numeral": "^2.0.6",
    "prop-types": "^15.6.2",
    "react": "16.9.0",
    "react-native": "https://github.com/expo/react-native/archive/sdk-36.0.1.tar.gz",
    "react-native-actionsheet": "^2.4.2",
    "react-native-autocomplete-input": "^4.1.0",
    "react-native-banner-carousel": "^1.0.3",
    "react-native-calendario": "^0.2.5",
    "react-native-deck-swiper": "1.5.25",
    "react-native-dialog-input": "^1.0.6",
    "react-native-dotenv": "^0.2.0",
    "react-native-dynamic-tab-view": "^1.0.7-0",
    "react-native-elements": "^0.19.1",
    "react-native-gesture-handler": "~1.5.0",
    "react-native-google-places-autocomplete": "^1.3.9",
    "react-native-keyboard-spacer": "^0.4.1",
    "react-native-loading-spinner-overlay": "^1.0.1",
    "react-native-maps": "0.26.1",
    "react-native-masked-text": "^1.9.2",
    "react-native-material-dropdown": "^0.11.1",
    "react-native-modal": "^7.0.1",
    "react-native-modalbox": "^1.6.0",
    "react-native-snap-carousel": "^3.8.1",
    "react-native-step-indicator": "0.0.9",
    "react-native-svg": "9.13.3",
    "react-native-swipe-list-view": "^2.0.1",
    "react-native-switch-selector": "^1.1.10",
    "react-native-timeline-listview": "^0.2.3",
    "react-native-vector-icons": "^6.6.0",
    "react-navigation": "^2.18.2",
    "react-redux": "^5.1.1",
    "redux": "^4.0.1",
    "redux-persist": "^5.10.0",
    "redux-thunk": "^2.3.0",
    "rn-viewpager": "^1.2.9",
    "superagent": "^4.1.0"
  },
  "devDependencies": {
    "babel-eslint": "^10.0.3",
    "babel-preset-expo": "^8.0.0",
    "enzyme": "^3.10.0",
    "enzyme-adapter-react-16": "^1.14.0",
    "eslint": "^6.3.0",
    "eslint-plugin-jest": "^22.16.0",
    "eslint-plugin-react": "^7.14.3",
    "eslint-plugin-react-native": "^3.7.0",
    "jest-expo": "^36.0.0",
    "jest-plugin-context": "^2.9.0",
    "react-dom": "16.9.0",
    "react-native-testing-library": "^1.11.1",
    "react-test-renderer": "16.5.0",
    "reactotron-react-native": "^2.1.4",
    "reactotron-redux": "^2.1.3",
    "redux-mock-store": "^1.5.3",
    "superagent-mock": "^3.7.0"
  }
}

Browsing @unimodules folder files, I found that node_modules/@unimodules/core/tsconfig.json has a ghost reference:

The file is expo-module-scripts/tsconfig.base. Maybe that is of some help for the expo team.

Hey guys, our problem was the expo-multiple-media-imagepicker package which have the package react-native-safe-area-view as its dependency and this last one have the react-native-safe-area-view dependency, and this one is incompatible with expo sdk <= 34. (Written on the first lines of it’s readme)

Hope this helps!

1 Like

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