React-native: undefined is not an object (evaluating 'regeneratorRuntime.mark')

Created on 5 Jul 2017  ·  92Comments  ·  Source: facebook/react-native

Is this a bug report?

Yes
(write your answer here)

Have you read the Bugs section of the Contributing to React Native Guide?

(Write your answer here.)

Environment

  1. react-native -v: 0.45.1
  2. node -v: 8.1.3
  3. npm -v: 5.0.4
  4. yarn --version (if you use Yarn): 0.27.5

Then, specify:

  1. Target Platform (e.g. iOS, Android): Android
  2. Development Operating System (e.g. macOS Sierra, Windows 10): macOS Sierra 10.12.5
  3. Build tools (Xcode or Android Studio version, iOS or Android SDK version, if relevant): Android SDK 25, Android Build Tools 25.0.2

Steps to Reproduce

(Write your steps here:)

  1. react-native init AwesomeProject
  2. react-native run-android

Expected Behavior


Should work as it did with RN v0.44.0 or RN 0.45.0
(Write what you thought would happen.)

Actual Behavior

undefined is not an object (evaluating 'regeneratorRuntime.mark')
<unknown>

loadModuleImplementation
    require.js:174:12
guardedLoadModule
    require.js:126:36
_require
    require.js:110:24
<unknown>
    index.js:2
loadModuleImplementation
    require.js:174:12
guardedLoadModule
    require.js:126:36
_require
    require.js:110:24
<unknown>
    configureStore.js:19
loadModuleImplementation
    require.js:174:12
guardedLoadModule
    require.js:126:36
_require
    require.js:110:24
<unknown>
    index.js:32
loadModuleImplementation
    require.js:174:12
guardedLoadModule
    require.js:126:36
_require
    require.js:110:24
<unknown>
    index.android.js:10
loadModuleImplementation
    require.js:174:12
guardedLoadModule
    require.js:119:45
_require
    require.js:110:24
global code

screen shot 2017-07-05 at 22 42 33

(Write what happened. Add screenshots!)

Reproducible Demo

(Paste the link to an example project and exact instructions to reproduce the issue.)

Ran Commands Locked

Most helpful comment

Found the problem what I had (with new project generated with Ignite).

The error were pointing in my project to line import rootSaga from '../Sagas/' which contain export like this:

export default function * root () {
  yield [
    // ... snip ....
  ]
}

After changing it to this started to work:

const root = function * root () {
  yield [
    // .... snip ....
  ]
}
export default root

I'm not yet familiar with the ES6 generator functions and require support for them, but at least now I can continue. And have to say that the error were pointing to the place where the invalid export were. I hope this helps someone.

All 92 comments

+1

I am getting this on 0.46

Alright seems like I've managed to fix this on RN 0.45.1
Just clean everything:

watchman watch-del-all
rm -rf $TMPDIR/react-*
rm -rf yarn.lock
rm -rf ./node_modules
yarn install

Worked for me, also unlinking and linking might help.

Face same problem when creating new project with Ignite.

  • react-native -V 0.45.1
  • node -v v7.10.0
  • npm -v 4.2.0
  • yarn --version 0.27.5
  • react-native run-ios

@Amurmurmur suggestion didn't help.

Found the problem what I had (with new project generated with Ignite).

The error were pointing in my project to line import rootSaga from '../Sagas/' which contain export like this:

export default function * root () {
  yield [
    // ... snip ....
  ]
}

After changing it to this started to work:

const root = function * root () {
  yield [
    // .... snip ....
  ]
}
export default root

I'm not yet familiar with the ES6 generator functions and require support for them, but at least now I can continue. And have to say that the error were pointing to the place where the invalid export were. I hope this helps someone.

So this won't roll out till 0.47?

Could be, someone just need to confirm it's a fix :D Let me know and I'll
do it. Planning to ship 0.46.1 soon

On Thu, 6 Jul 2017 at 17:57 Gant Laborde notifications@github.com wrote:

So this won't roll out till 0.47?


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/facebook/react-native/issues/14838#issuecomment-313439248,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ACWcxsfBv16-prjiBfU2Jlkk2fr-ZJVZks5sLQP4gaJpZM4OOyOI
.

Tried to fix with the suggested Saga solution, its surely something to do with saga because when I comment out saga implementation in my configureStore, the error is gone however trying suggested solution doesnt work for me. :/

@grabbou @GantMan @ernoaapa
Alright guys, figured out the problem
downgraded babel-preset-react-native form 2.1.0 to 2.0.0 all works fine on Android/iOS
Though once upgraded to 0.46 the error comes back.
As for RN 0.47-rc.0, most packages I have linked, wont work due to some changes to the api of the react-native I guess because they will throw errors such as:

:react-native-blur:compileReleaseJavaWithJavac - is not incremental (e.g. outputs have changed, no previous execution, etc.).
/Users/amurmurmur/exampleapp/node_modules/react-native-blur/android/src/main/java/com/cmcewen/blurview/BlurViewPackage.java:23: error: method does not override or implement a method from a supertype
    @Override
    ^
Note: /Users/amurmurmur/exampleapp/node_modules/react-native-blur/android/src/main/java/com/cmcewen/blurview/BlurringView.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
1 error
:react-native-blur:compileReleaseJavaWithJavac FAILED

@Amurmurmur I am still seeing the issue on 0.45.1 even after downgrading babel. I wonder how much node and npm versions might be affecting which fixes work and which ones don't.
node: v8.1.0
npm: 5.1.0
OS: macOS Sierra 10.12.5

@kcalmes Make sure you reset react-native packager after you've downgraded babel with:

npm start -- --reset-cache

That did the trick, I previously deleted the node_modules dir, but I didn't realize I missed the other cache. Thanks for your help @Amurmurmur!

@facebook-github-bot close

@brentvatne tells me to close this issue. If you think it should still be opened let us know why.

Still experiencing this with 0.46.1 and babelrc on both 2.0.0 and 2.1.0. Tried all the things done here but it doesnt fix it. Why was this closed @brentvatne @grabbou

@vongohren Double make sure you reset the packager, Im using react-native 0.46.1 and babel at 2.0.0 all good on both platforms Debug/Release builds.
Please make sure you run

watchman watch-del-all
rm -rf ./node_modules
rm -rf $TMPDIR/react-*
npm i [email protected] -D -S
npm install
npm start -- --reset-cache
react-native run-ios

Also make sure you reset your android/ios emulator/simulator, delete both android/ios build folders.

Loool, this is what I have done all the way, but I did not reset the emulator and delete the build folder. Seemed to help, thanks man. But can anyone answere why this happens? @grabbou @brentvatne

Edit: This did solve my android problem, but produces different iOS problems. What are the different clearing options of ios? Clear derivated folders? Pod install again. What else @Amurmurmur ? Im running Cocoapods and swift on iOS

Downgrade babel-preset-react-native to 2.0.0 work for me too. But why 2.1.0 don't work?

Downgrading worked for me, but I'd also like to know what the issue actually is and what a real fix is.

Running a completly new project, that is not dependent on cocoapods or swift, works out of the box. I did not try to add all my dependencies but that could be a test case.

@vongohren Indeed the fresh project will work for you however once you start using babel features such as export/import you will face the problem with babel-preset-react-native 2.1.0
This is a relevant issue #14933

Same issue here, from react-native version 0.45.1 on Linux subsystem for Windows, downgrading babel-preset and @Amurmurmur's method doesn't work

@HelloEdit
But it works, can you share an example project where the problem occurs for you ?
It works fine on my side no matter RN 0.45.1 or 0.46.1 all still.

For me, using yarn instead of npm was the only thing that worked.

watchman watch-del-all
rm -rf ./node_modules
rm -rf $TMPDIR/react-*
npm cache clean
yarn cache clean
yarn install
yarn start -- --reset-cache
react-native run-ios

I also downgraded babel-preset-react-native to 2.0.0, so I'm not sure if it was the combination or just switching to yarn.

yes yes yes! @kaxline i agree with your yarn theory. relying on that as well as downgrade [email protected], [email protected], and moving /node_modules/react-native/packager/react-native-xcode.sh
to =>
/node_modules/react-native/scripts/react-native-xcode.sh

finally! i've been trying everything for the past few hours.

I upgrade my project to RN 0.46.1, and it's work !

@Amurmurmur Please, in programming, never say "it works on my PC though" 😄

@kaxline Thank you. It worked for me!

@HelloEdit updated to 0.46.1 didn't work for me.

Is there any clear solution ?, I don't want to downgrade babel-preset-react-native every time I set redux-saga for my react-native app.

↪️ @arufian Hum...Just change the version did not work for me, I had to regenerate a new project (I used ignite) with RN 0.46.2

The problem still here in RN 0.46.4 , unless downgrade babel-preset-react-native to 2.0.0

↪️@dioxyde Have you tried 0.46.2 ? It's work like a charm for me 👍

@dioxide Running RN 0.46.4 with babel-preset-react-native 2.0.0 just fine.

Try reseting the packager with npm start -- --reset-cache

Another workaround pointed by Markus in https://github.com/facebook/react-native/issues/14933 which doesnt require downgrade the babel preset is to use variables so

instead of

function* foo() {}

do

const foo = function* foo() {}

oh no,this solutions all not work for me

@sayhei
imposibru
Most likely you have to:
clean yarn/npm cache
install babel with yarn add [email protected]
run React-native packager with npm start -- --reset cache, and rebuild the debug/release builds

In RN 0.47.1 even just doing this:

function* upAsyncWorker(action: UpAsyncAction) {
/// ...
}

Without an export is causing this error. I fixed it by doing the const trick above. So this works now:

const upAsyncWorker = function* upAsyncWorker(action: UpAsyncAction) {
/// ...
}

The only question I have is that, the const way of exporting sagas, going to be the standard now? Or next babel-present release will fix that ?

Another workaround pointed by Markus in #14933 which doesnt require downgrade the babel preset is to use variables so

instead of

function* foo() {}

do

const foo = function* foo() {}

It is work for me too, but only with latest versions of react-native and babel-preset-react-native. I am happy)))

I tried babel-preset-react-native v3.0.0 and still see the same issue

Hello @brentvatne, this issue is apparently always present... Consider its re-opening please : )

is still an issue in react-native .47
tried downgrading to babel-preset-react-native v2.0.0

This issue caused by commits:

  • e7c1cf5b7d2eba9468804635d0c2a0fc6725e42a added a new babel transformer (babel-preset/transforms/transform-regenerator-runtime-insertion.js)
  • 3103258ca0fd2fb0fda0da1120d9cdf4baf0ca05 cherry-pick of 361f03badb2080c009080312bbf45a7372b6a387 removed global.regeneratorRuntime. But, this commit has been reverted.

This code will be inserted by babel. And the order of variables causes the undefined issue.

var _marked = regeneratorRuntime.mark(...);
var regeneratorRuntime = require("regenerator-runtime"); // inserted by the new transformer

The solution is use babel-preset-react-native <= 2.0.0

Yep it's good solution while waiting for a patch of presets
Nobody knows if it will happen soon?

Hello @brentvatne, this issue is apparently always present... Consider its re-opening please : )

Oh wow I'm super surprised to see this closed. Closing this says "no we don't want to support the standard established syntax". Is there a valid perf reason like the empty object assign?

Hello @Noitidart,
I'm definitely a bit naive but I think it's just a bug, not a stuff like "change everything and say nothing to anyone".
If a member of the react team wanted to give us an answer, we would all be happy I think...

PS: I absolutely do not know how the Facebook bot works for Github, we can not ask him to reopen the issue?

Hi @mjesun, could you follow this issue, either improve the transformer or remove it.
Thanks.

hello! this seems to be a problem for everyone using redux-sagas, I don't use it and I don't really touch this part of the code so if someone wants to fix it, that would be great. please include a unit test in the fix so it doesn't regress in the future.

@brentvatne Thanks for reopening this!

If I'm understanding the commits @shenjunru posted correctly (thanks!) this is what I think has happened:

https://github.com/facebook/react-native/commit/3103258ca0fd2fb0fda0da1120d9cdf4baf0ca05 Removed the global for regeneratorRuntime
https://github.com/facebook/react-native/commit/e7c1cf5b7d2eba9468804635d0c2a0fc6725e42a added a new babel transformer which should have added the require("regeneratorRuntime") where needed, however, this plugin adds in _after_ the var _marked = regeneratorRuntime.mark(...); line, leading to the error.

I know absolutely nothing about babel transformers, but I would imagine this means that the fix needs to be in the babel-preset/transforms/transform-regenerator-runtime-insertion.js file.

If no one with some experience of babel is able to take this up, I can give it a go, but it might take me a bit of research.

@matt-oakes The simplest way to fix this issue, just revert the commit e7c1cf5b7d2eba9468804635d0c2a0fc6725e42a 😉

@shenjunru Maybe I'm misunderstanding, but wouldn't something like that transformation be needed now that there is no global for regeneratorRuntime because of https://github.com/facebook/react-native/commit/3103258ca0fd2fb0fda0da1120d9cdf4baf0ca05?

@matt-oakes
Commit 3103258ca0fd2fb0fda0da1120d9cdf4baf0ca05 has been reverted. So the regeneratorRuntime became global again.
And commit e7c1cf5b7d2eba9468804635d0c2a0fc6725e42a (transform-regenerator-runtime-insertion) is not necessary anymore.

@shenjunru That makes sense! Just to confirm, this is the commit which reverted it https://github.com/facebook/react-native/commit/737abe3b7603e27a1a88498b3a260d67fa747ee7#diff-3edd4dd9f4a04de3c7b2f2f12caa6cdc (19th July 2017) and therefore should be in the 0.48.0-rc.0 release.

Hi @matt-oakes , @shenjunru!

First off, sorry for the late reply; it's been a busy weekend. Thanks for taking care of the revert; I'm sorry this code was still here because we also experienced internally some issues and we were almost certain it was reverted (which obviously, it was not). We also had a previous try where we tried adding it but we also had to revert so that is what probably caused the confusion :(

Either way, thanks once again for taking care of it! :)

@mjesun I have just opened a PR (#15584) which reverts that commit and removes the unnecessary transformer. Hopefully, this is correct and fixes the issue!

That should do the trick, yes :)

I published [email protected] with the latest code. Please try it out and if it's working well we can publish 3.0.2.

@ide That version seems to work great! Thanks for publishing it!

@ide Confirmed it's working! Thanks

@ide Thanks!!! [email protected] is working!

@ide Is 3.0.2 ready to publish?

Thanks for confirming, everyone. I published [email protected] (dist-tag = latest) as well as v2.0.1 with this fix.

still got issues on latest RN even with the latest preset

Same issue here.
RN: "0.47.2"
babel-preset-react-native: "2.0.0"

also changed export default function* ... to const saga = function* ...

Any help?

@Manuelandro update to babel-preset-react-native 2.0.1 or 3.0.2

@michaelduminy thanks for your suggest but it still doesn't work. Neither 3.0.2 or 2.0.1

schermata 2017-09-05 alle 11 44 21

Clear things like @Amurmurmur wrote worked, babel-preset-react-native is 2.0.0, if you want to try that out @Manuelandro

~same issue here~
~react-native: 0.47.2~
~babel-preset-react-native, neither 3.0.2 or 2.0.1~

I had the same issue using 2.1.0 and downgraded to 2.0.0 which fixed the issue.

Now for some reason it doesn't work anymore with 2.0.0 😕

LE : apparently worked after a restart, maybe something was cached...

@fengshuo thanks, but already tried and didn't work.
I'm with Expo create-react-native-app, maybe it adds some to this issue

Same here, also coming from Expo create-react-native-app.

@fengshuo @webwelten I believe you are going to have to wait and see if this gets updated in SDK 21, or forbabel-preset-expo to get updated... or you can try and not use the default crna _.babelrc_ and set the preferred babel preset. You will have to account for @expo/vector-icons though; see this comment and the one below it.

Just to let you know that i solved ejecting from Expo

I'm still having this issue, even after following all of the solutions presented in this thread, including @Amurmurmur 's solution and resetting my terminal / local server, even resetting my computer. It started happening for me after I moved my project root from my user folder to my documents, but the issue persists even if it's moved back so I'm not sure that's the cause.

I can't help but notice my main.jsbundle in xcode is red, which usually indicates it's missing. I'd try to re-add it to my project, but I can't find any resources online that indicate where the main.jsbundle is.

Here's my full Xcode log:

undefined is not an object (evaluating 'regeneratorRuntime.mark')
2017-09-13 11:47:23.171 [fatal][tid:com.facebook.react.ExceptionsManagerQueue] Unhandled JS Exception: undefined is not an object (evaluating 'regeneratorRuntime.mark')
2017-09-13 11:47:23.176 [info][tid:com.facebook.react.JavaScript] Running application "APP" with appParams: {"rootTag":1,"initialProps":{}}. __DEV__ === true, development-level warning are ON, performance optimizations are OFF
2017-09-13 11:47:23.176 [error][tid:com.facebook.react.JavaScript] Application APP has not been registered.

Hint: This error often happens when you're running the packager (local dev server) from a wrong folder. For example you have multiple apps and the packager is still running for the app you were working on before.
If this is the case, simply kill the old packager instance (e.g. close the packager terminal window) and start the packager in the correct app folder (e.g. cd into app folder and run 'npm start').

This error can also happen due to a require() error during initialization or failure to call AppRegistry.registerComponent.


2017-09-13 11:47:23.197 [fatal][tid:com.facebook.react.ExceptionsManagerQueue] Unhandled JS Exception: Application APP has not been registered.

Hint: This error often happens when you're running the packager (local dev server) from a wrong folder. For example you have multiple apps and the packager is still running for the app you were working on before.
If this is the case, simply kill the old packager instance (e.g. close the packager terminal window) and start the packager in the correct app folder (e.g. cd into app folder and run 'npm start').

This error can also happen due to a require() error during initialization or failure to call AppRegistry.registerComponent.

Currently running on the latest version of React Native (0.48.3) and the latest babel-preset-react-native (3.0.2).

Also to address the registration complaint, my app has been running fine on previous versions of React Native and I haven't changed the registration code in either my index.ios.js or my index.android.js.

My index.ios.js and index.android.js:

import {
  AppRegistry,
} from 'react-native';

import Home from "./src/Home";

AppRegistry.registerComponent('APP', () => Home);

This should be correct, yeah? So I have no clue why it's suddenly getting this complaint too. Although I suspect it's the result of the first error undefined is not an object (evaluating 'regeneratorRuntime.mark')

I'm using react-native 0.48.3 and what fixed it for me is the following steps:

1) I created a .babelrc file with the following contents in the root of the project

{
  "presets": ["react-native"]
}

2) I installed babel-preset-react-native@3.0.2
3) I ran node node_modules/react-native/local-cli/cli.js start --reset-cache

The problem is now gone.

@SudoPlz How do I create a .babelrc file?

@arminsal1 Open a terminal, cd to your project dir and type touch .babelrc

@SudoPlz Your solution solved my problem, thank you so much!

I'm glad, :)

@SudoPlz, thanks. This did the trick finally. Can you explain also why only after this it starts to work?

@ernoaapa Thanks

watchman watch-del-all
rm -rf ./node_modules
rm -rf $TMPDIR/react-*
npm i [email protected] -D -S
npm install
npm start -- --reset-cache
react-native run-ios

From:
https://stackoverflow.com/questions/45155249/when-using-redux-saga-with-react-native-web-we-get-an-error-cannot-read-propert

ps:
First remove package-lock.json or yarn.lock because other packages may also use babel-preset-react-native, and you can open the lock file to check that they depend on the babel-preset-react-native, which may be the locked version 2.1.0

I ran into this error using _babel-preset-expo_ and fixed it by switching to _babel-preset-react-native_:

yarn add babel-preset-react-native

in _.babelrc_:

"presets": [
    "babel-preset-react-native"
  ]

@csuermann Thanks! That worked for me!

what sdk version were you using @csuermann? this shouldn't be a problem with latest version of expo

@brentvatne:
"sdkVersion": "21.0.0"

@brentvatne I am running into the same issue with sdkVersion "22.0.0"

It seems that the version of babel-preset-react-native that babel-preset-expo depends on is 2.1.0. Per what I've read above, this may be causing the problem (and downgrading to 2.0.0 is a potential solution)

Edit:

I was able to get around the issue without changing any dependencies, just had to switch up how I write my sagas:

Went from

function* listenForSignUpUser() {
}

to

const listenForSignUpUser = function* () {
}

I have a bug in the Expo's Font.loadAsync dependency. It uses async and I get this error:
bildschirmfoto 2017-11-28 um 12 06 45
Please help me. Im on time pressure. Thanks

@SudoPlz
node node_modules/react-native/local-cli/cli.js start --reset-cache + "the sagas export refactoring" work for me !! 😁

"babel-preset-react-native": "^4.0.0",`
"react-native": "^0.50.4",
"react": "16.0.0"

Please note that this also error might also happen with old code (react native 0.44 and about as old babel-preset-react-native) if using Node >= 9.

A fix is to use any Node <9 version which might be a lot easier than upgrading react native.

@Pokute I downgraded Node from 9 to 8, and it worked for me!
Thank you!!!

Was this page helpful?
0 / 5 - 0 ratings