Repository navigation
[Metro Bundler] Maximum call stack size exceeded (when upgrading to 0.50.1) #16689
Copy link
Copy link
Closed
Labels
StaleThere has been a lack of activity on this issue and it may be closed soon.There has been a lack of activity on this issue and it may be closed soon.
Description
Is this a bug report?
Yes
Have you read the Contributing Guidelines?
Yes
Environment
Environment:
OS: Linux 4.10
Node: 8.9.0
Yarn: 1.3.2
npm: 5.5.1
Watchman: 4.1.0
Xcode: N/A
Android Studio: Not Found
Packages: (wanted => installed)
react: ^16.0.0 => 16.0.0
react-native: ^0.50.1 => 0.50.1
Target Platform: iOS (10.3) & Android (targetSdkVersion 22)
Steps to Reproduce
Just upgraded from 0.49.5 to 0.50.1 and tried to bundle. The breaking changes in the new release hadn't affected my app and shouldn't have affected the build process.
npm i react-native@0.50.1react-native bundle --verbose --platform android --dev false --entry-file index.js --bundle-output output.bundle
Output:
Scanning folders for symlinks in /home/james/Documents/react-native-app/node_modules (5ms)
Scanning folders for symlinks in /home/james/Documents/react-native-app/node_modules (7ms)
Loading dependency graph, done.
Maximum call stack size exceeded
[Error] "react-native bundle" command exited with code 1.
On the other hand when I reinstalled react-native 0.49.5:
npm install react-native@0.49.5react-native bundle --verbose --platform android --dev false --entry-file index.js --bundle-output output.bundle
Output:
Scanning folders for symlinks in /home/james/Documents/react-native-app/node_modules (5ms)
Scanning folders for symlinks in /home/james/Documents/react-native-app/node_modules (13ms)
Loading dependency graph, done.
bundle: start
bundle: finish
bundle: Writing bundle output to: output.bundle
bundle: Done writing bundle output
Assets destination folder is not set, skipping...
What does work
Running react-native start (i.e. developer mode) works fine
Expected Behavior
The project should bundle correctly
Actual Behavior
The bundling fails with a stack overflow. There's no clear indication what is causing the behavior because there's no stack trace despite explicitly enabling verbose mode. I don't know whether stack traces of these errors are kept but it may be helpful in identifying the problem.
I upgraded Node (from v6 to v8) because I thought that may be causing it.
Installed packages
├── axios@0.17.0
├── babel-cli@6.26.0
├── UNMET PEER DEPENDENCY babel-eslint@8.0.1
├── babel-preset-es2015@6.24.1
├── babel-preset-flow@6.23.0
├── babel-preset-react-native@4.0.0
├── eslint@4.10.0
├── eslint-config-airbnb@16.1.0
├── eslint-config-react-app@2.0.1
├── eslint-plugin-flowtype@2.39.1
├── eslint-plugin-import@2.8.0
├── UNMET PEER DEPENDENCY eslint-plugin-jsx-a11y@6.0.2
├── eslint-plugin-react@7.4.0
├── eslint-plugin-react-native@3.1.0
├── flow-bin@0.58.0
├── immutable@4.0.0-rc.7
├── jest@21.2.1
├── prettier-eslint@8.2.1
├── prop-types@15.6.0
├── react@16.0.0
├── react-dom@16.0.0
├── react-native@0.50.1
├── react-native-code-push@5.1.3-beta
├── react-native-htmlview@0.12.1
├── react-native-keyboard-aware-scrollview@1.1.7 (git+https://github.com/jamsch/react-native-keyboard-aware-scrollview.git#5575b8c31df341c1719630fe2c7c08c171477243)
├── react-native-music-control@0.4.12
├── react-native-offline@3.4.0
├── react-native-popup-menu@0.9.0
├── react-native-sentry@0.30.2
├── react-native-sound@0.10.4
├── react-native-swiper@1.5.13
├── react-native-vector-icons@4.4.2
├── react-native-version-up@1.0.7
├── react-native-video@2.0.0
├── react-native-video-player@0.8.5
├── react-native-voice@0.2.5
├── react-navigation@1.0.0-beta.19
├── react-redux@5.0.6
├── react-test-renderer@16.0.0
├── redux@3.7.2
├── redux-devtools-extension@2.13.2
├── redux-persist@5.2.2
├── redux-saga@0.16.0
├── reselect@3.0.1
├── rimraf@2.6.2
├── shortid@2.2.8
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
StaleThere has been a lack of activity on this issue and it may be closed soon.There has been a lack of activity on this issue and it may be closed soon.
Activity
[-][Bundler CLI] Maximum call stack size exceeded (when upgrading to 0.50.1)[/-][+][Metro Bundler] Maximum call stack size exceeded (when upgrading to 0.50.1)[/+]sibelius commentedon Nov 6, 2017
this is happening on android
sibelius commentedon Nov 6, 2017
this is happening on node 6 and also node 8
with android and ios
with react-native 50 and also 50.1
adbl commentedon Nov 6, 2017
Also seeing this 😕
adbl commentedon Nov 6, 2017
Setting the
--dev truemakes the bundle suceed.JCMais commentedon Nov 6, 2017
@adbl can you share your deps?
jamsch commentedon Nov 6, 2017
I took the time to uninstall pretty much every package in my large project until I was left with the following:
(I also poly-filled the missing imports)
The error still occurs with only these packages installed.
What's unusual is that I also tried a
react-native initproject and that bundled fine. Has this got something to do with the project size?Anyways, I'll be sticking to 0.49.5 for the time being until I can find out why this is happening.
jamsch commentedon Nov 6, 2017
I think that I may have found the problem. One of my unused recursive functions in the project seem to be causing the bundling error.
The unusual thing I found is that if the function was called it would bundle correctly. Otherwise there's a stack overflow. This only affects non-dev bundles.
Also changing the function to a const arrow function seems to work.
So my theory is that updates to the metro bundler cli between react-native 0.49.5 and 0.50.1 now cause stack overflows when bundling files that contain an unreferenced recursive function.
adbl commentedon Nov 7, 2017
@jamsch I have been struggling with this issue too now for quite some time. How were you able to point the problem to this little function?
Btw, it took me like two hours to figure out out that setting
DEBUG=Metro:*in environment gave me debug logs when running bundler, should be mentioned in docs somewhere I think. But it doesn't give me any information in which function it crashes so not so helpful anyway.jamsch commentedon Nov 7, 2017
@adbl I started adding/removing module includes starting from the app root until I narrowed down a specific file.
Even though it bundles successfully, the app unfortunately now instantly crashes in production mode, while dev mode is still fine. I can't tell what's wrong because obviously the bundle is minified and I'm left with the error:
I'll be sticking with 0.49.5 for now.
adbl commentedon Nov 7, 2017
Yeah, I'm about to give up for now too. I suspect it could be related to minification and saw this commit which could be related: react/metro@367a5f5
adbl commentedon Nov 7, 2017
Ok, so in our case when I comment out everything from
App.react.jsit bundles, but when I add back imports for just@expo/ex-navigationit fails, so if fails something there.adbl commentedon Nov 7, 2017
Yep, here is the code causing trouble in ex-navigation:
src/ExNavigationRouter.js:Which is referenced conditionally only if
__DEV__which I guess transformed away per the commit I referenced in my previous comment.And yes, the bundle doesn't fail if changing it to:
fix recursive function to play well with metro bundler, fix react/rea…
adbl commentedon Nov 7, 2017
Going a bit deeper, I now have a minified production jsbundle which crashes inside what I think is minified regenerator-runtime:
the crashing minified code is:
I think this is here: https://github.com/facebook/regenerator/blob/9b6ebc0532ff373e06e3421b26800ac8979913d3/packages/regenerator-runtime/runtime.js#L300
Shouln't more people have this problem, I thought async/await was used widely by now?
19 remaining items
rafeca commentedon Nov 8, 2017
@petejkim It seems like the other issue that you are experiencing is react/metro#78 . This was fixed by 1a2a46a9fb3e3af2089c06ce7a25dbcd8737201b but we haven't released a major version of metro with that fix yet (I'm planning to release v0.21.0 tomorrow).
@petejkim as a workaround, can you try to add a
require('InititializeCore');statement as early as possible on your application logic?adbl commentedon Nov 8, 2017
I confirm that with
resolutionsusing metro bundler 0.20.1 in our project solves:Our app seems to be working fine but we are upgrading from RN 0.36 so we have a lot of QA to do.
grabbou commentedon Nov 8, 2017
fungilation commentedon Nov 8, 2017
You are a brave man.
I confirm RN 0.50.3 fixed my issue, without need for bumping
metro-bundlerversion in package.jsonresolutions.christopherdro commentedon Nov 8, 2017
The issue with
e.lengthis related to #16745ItsNoHax commentedon Nov 9, 2017
50.3 still crashes iOS apps that are in release mode. When can we expect a fix for this? @grabbou
grabbou commentedon Nov 9, 2017
askielboe commentedon Nov 9, 2017
@ItsNoHax are you sure you're not seeing this issue instead: #16745 ?
stale commentedon Jan 8, 2018
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Maybe the issue has been fixed in a recent release, or perhaps it is not affecting a lot of people. If you think this issue should definitely remain open, please let us know why. Thank you for your contributions.
itisnas commentedon Jan 25, 2018
I get this error when I try to import a node module in react native (I know we cant import node modules in react-native, but there's a way doing it), I've raised an issue, please clarify philikon/ReactNativify#14
jasdeepsingh commentedon Feb 5, 2018
I'm on react-native 0.52.2 and facing this issue. The crash happens only in Android Release build. I suspect iOS Release build will have this issue too, but haven't tried to build an iOS release app yet.
suvodeep-pyne commentedon Apr 24, 2018
react-native
0.52.3. Same issue.--variant=release