BREAKING: Add regenerator-runtime on demand, based on the files

Summary:
Adding a Babel plugin that will analyze the file looking for any potential candidate to use `regenerator-runtime`, and if so, will inject dynamically the module. The module is injected per file, so we avoid polluting the global environment. The plugin is also able to inject the `require` call beforehand, so that the inliner can pick them and inline them.

The Babel plugin is part of `react-native-babel-preset`, so as long as you are using this preset you are safe. If not, you should include the specific transformer into your list of plugins, as `react-native-babel-preset/transforms/transform-regenerator-runtime-insertion.js`.

Reviewed By: davidaurelio

Differential Revision: D5388655

fbshipit-source-id: dc403f3d5e2d807529eb8569a85c45fec36a6a3e
This commit is contained in:
Miguel Jimenez Esun 2017-07-19 10:57:56 -07:00 committed by Facebook Github Bot
parent d1c9746902
commit 3103258ca0
4 changed files with 7 additions and 16 deletions

View File

@ -138,15 +138,6 @@ defineProperty(global, 'Set', () => require('Set'), true);
// ERROR: Event loop not supported. // ERROR: Event loop not supported.
defineProperty(global, 'Promise', () => require('Promise')); defineProperty(global, 'Promise', () => require('Promise'));
// Set up regenerator.
defineProperty(global, 'regeneratorRuntime', () => {
// The require just sets up the global, so make sure when we first
// invoke it the global does not exist
delete global.regeneratorRuntime;
require('regenerator-runtime/runtime');
return global.regeneratorRuntime;
});
// Set up timers // Set up timers
const defineLazyTimer = name => { const defineLazyTimer = name => {
defineProperty(global, name, () => require('JSTimers')[name]); defineProperty(global, name, () => require('JSTimers')[name]);

View File

@ -163,11 +163,11 @@ const THUMB_URLS = [
require('./Thumbnails/victory.png'), require('./Thumbnails/victory.png'),
]; ];
const LOREM_IPSUM = 'Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix \ const LOREM_IPSUM = 'Lorem ipsum dolor sit amet, ius ad pertinax oportere accommodare, an vix ' +
civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id \ 'civibus corrumpit referrentur. Te nam case ludus inciderint, te mea facilisi adipiscing. Sea id ' +
integre luptatum. In tota sale consequuntur nec. Erat ocurreret mei ei. Eu paulo sapientem \ 'integre luptatum. In tota sale consequuntur nec. Erat ocurreret mei ei. Eu paulo sapientem ' +
vulputate est, vel an accusam intellegam interesset. Nam eu stet pericula reprimique, ea vim illud \ 'vulputate est, vel an accusam intellegam interesset. Nam eu stet pericula reprimique, ea vim illud ' +
modus, putant invidunt reprehendunt ne qui.'; 'modus, putant invidunt reprehendunt ne qui.';
/* eslint no-bitwise: 0 */ /* eslint no-bitwise: 0 */
function hashCode(str: string): number { function hashCode(str: string): number {

View File

@ -1,6 +1,6 @@
{ {
"name": "babel-preset-react-native", "name": "babel-preset-react-native",
"version": "2.0.0", "version": "2.1.0",
"description": "Babel preset for React Native applications", "description": "Babel preset for React Native applications",
"main": "index.js", "main": "index.js",
"repository": "https://github.com/facebook/react-native/tree/master/babel-preset", "repository": "https://github.com/facebook/react-native/tree/master/babel-preset",

View File

@ -150,7 +150,7 @@
"babel-polyfill": "^6.20.0", "babel-polyfill": "^6.20.0",
"babel-preset-es2015-node": "^6.1.1", "babel-preset-es2015-node": "^6.1.1",
"babel-preset-fbjs": "^2.1.4", "babel-preset-fbjs": "^2.1.4",
"babel-preset-react-native": "^2.0.0", "babel-preset-react-native": "^2.1.0",
"babel-register": "^6.24.1", "babel-register": "^6.24.1",
"babel-runtime": "^6.23.0", "babel-runtime": "^6.23.0",
"babel-traverse": "^6.24.1", "babel-traverse": "^6.24.1",