Add static injection for feature flags (#11269)

* Replace ReactDOMFeatureFlags with ReactFeatureFlags

* Add static injection for feature flags
This commit is contained in:
Dan Abramov
2017-10-18 18:40:52 +01:00
committed by GitHub
parent 101934646f
commit dee604dbe2
5 changed files with 37 additions and 25 deletions

View File

@@ -372,7 +372,8 @@ function getPlugins(
hasteName,
moduleType,
manglePropertiesOnProd,
modulesToStub
modulesToStub,
featureFlags
) {
const plugins = [
babel(updateBabelConfig(babelOpts, bundleType)),
@@ -383,7 +384,8 @@ function getPlugins(
const replaceModules = Modules.getDefaultReplaceModules(
bundleType,
modulesToStub
modulesToStub,
featureFlags
);
// We have to do this check because Rollup breaks on empty object.
@@ -525,7 +527,8 @@ function createBundle(bundle, bundleType) {
bundle.hasteName,
bundle.moduleType,
bundle.manglePropertiesOnProd,
bundle.modulesToStub
bundle.modulesToStub,
bundle.featureFlags
),
})
.then(result =>

View File

@@ -124,7 +124,6 @@ function ignoreFBModules() {
return [
// At FB, we don't know them statically:
'ReactFeatureFlags',
'ReactDOMFeatureFlags',
// In FB bundles, we preserve an inline require to ReactCurrentOwner.
// See the explanation in FB version of ReactCurrentOwner in www:
'ReactCurrentOwner',
@@ -297,13 +296,27 @@ function getAliases(paths, bundleType, moduleType, extractErrors) {
);
}
function getDefaultReplaceModules(bundleType, bundleModulesToStub) {
function replaceFeatureFlags(featureFlags) {
if (!featureFlags) {
return {};
}
return {
"'ReactFeatureFlags'": `'${resolve(featureFlags)}'`,
};
}
function getDefaultReplaceModules(
bundleType,
bundleModulesToStub,
featureFlags
) {
return Object.assign(
{},
replaceFbjsModuleAliases(bundleType),
replaceDevOnlyStubbedModules(bundleType),
replaceLegacyModuleAliases(bundleType),
replaceBundleStubModules(bundleModulesToStub)
replaceBundleStubModules(bundleModulesToStub),
replaceFeatureFlags(featureFlags)
);
}

View File

@@ -17,8 +17,8 @@ var DOMNamespaces = require('DOMNamespaces');
var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');
var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
var ReactControlledComponent = require('ReactControlledComponent');
var ReactFeatureFlags = require('ReactFeatureFlags');
var ReactDOMComponentTree = require('ReactDOMComponentTree');
var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags');
var ReactDOMFiberComponent = require('ReactDOMFiberComponent');
var ReactDOMFrameScheduling = require('ReactDOMFrameScheduling');
var ReactGenericBatching = require('ReactGenericBatching');
@@ -632,7 +632,7 @@ var DOMRenderer = ReactFiberReconciler({
scheduleDeferredCallback: ReactDOMFrameScheduling.rIC,
useSyncScheduling: !ReactDOMFeatureFlags.fiberAsyncScheduling,
useSyncScheduling: !ReactFeatureFlags.enableAsyncSchedulingByDefaultInReactDOM,
});
ReactGenericBatching.injection.injectFiberBatchedUpdates(

View File

@@ -1,16 +0,0 @@
/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @providesModule ReactDOMFeatureFlags
*/
'use strict';
var ReactDOMFeatureFlags = {
fiberAsyncScheduling: false,
};
module.exports = ReactDOMFeatureFlags;

View File

@@ -10,8 +10,20 @@
'use strict';
var ReactFeatureFlags = {
export type FeatureFlags = {|
enableAsyncSubtreeAPI: boolean,
enableAsyncSchedulingByDefaultInReactDOM: boolean,
|};
var ReactFeatureFlags: FeatureFlags = {
enableAsyncSubtreeAPI: true,
enableAsyncSchedulingByDefaultInReactDOM: false,
};
if (__DEV__) {
if (Object.freeze) {
Object.freeze(ReactFeatureFlags);
}
}
module.exports = ReactFeatureFlags;