React: UMD build doesn't work via import in the browser (TypeError: Cannot set property 'React' of undefined)

Created on 19 Jan 2019  Â·  6Comments  Â·  Source: facebook/react

When importing the UMD build (both production and development) in the browser – that is, from a <script type="module"> – an error is thrown: TypeError: Cannot set property 'React' of undefined.

The relevant code:

12: (function (global, factory) {
13: typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
14: typeof define === 'function' && define.amd ? define(factory) :
15: (global.React = factory());
16: }(this, (function () { 'use strict';

Throws on line 15 as global ≣ this is undefined in a module context.
Is this as simple to fix as passing this || self on line 16, or is there a catch?

Do you want to request a feature or report a bug?
bug

What is the current behavior?
TypeError: Cannot set property 'React' of undefined

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem.
https://jsfiddle.net/dja3wfc7/ (_Updated_)

What is the expected behavior?
I would expect the import to work, as the same file works if included via <script src=...>.

Which versions of React, and which browser / OS are affected by this issue? Did this work in previous versions of React?
React 16.7.0 (latest stable) – I have found another UMD related bug, #3037, which pertains to React 0.12.2. I have tried that version and indeed it works, it can be imported.
Chrome 71, Safari 12 tested (probably all browsers)

Build Infrastructure Stale

All 6 comments

It's not expected that UMD imports would work with import — you want ESM builds (which we don't offer yet).

@gaearon I have looked into why the UMD build doesn't work, as I thought it should. (Of course an ESM build would be better, but in the meantime...)

It is because rollup ^0.52.1 is used for the build. I haven't tracked down when this was fixed in rollup but the current version (1.1.2) produces a correct UMD, which works in a module context.

Is it feasible to upgrade the rollup dependency, or is there a reason to stick with that old version?

I don't remember a particular reason. If you send a PR upgrading Rollup we can look at it!

I don't remember a particular reason. If you send a PR upgrading Rollup we can look at it!

https://github.com/facebook/react/pull/15037

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contribution.

Closing this issue after a prolonged period of inactivity. If this issue is still present in the latest release, please create a new issue with up-to-date information. Thank you!

Was this page helpful?
0 / 5 - 0 ratings