Skip to content

Commit

Permalink
Improve DX when combining react-dom/profiling and schedule/tracking (#…
Browse files Browse the repository at this point in the history
…13605)

* Added blessed production+profiling entry point for schedule/tracking
* Add invariant when profiling renderer is used with non-profiling schedule/tracking
  • Loading branch information
bvaughn authored Sep 10, 2018
1 parent 144328f commit 03ab1ef
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 0 deletions.
12 changes: 12 additions & 0 deletions packages/react-reconciler/src/ReactFiberScheduler.js
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,18 @@ let didWarnSetStateChildContext;
let warnAboutUpdateOnUnmounted;
let warnAboutInvalidUpdates;

if (enableSchedulerTracking) {
// Provide explicit error message when production+profiling bundle of e.g. react-dom
// is used with production (non-profiling) bundle of schedule/tracking
invariant(
__interactionsRef != null && __interactionsRef.current != null,
'It is not supported to run the profiling version of a renderer (for example, `react-dom/profiling`) ' +
'without also replacing the `schedule/tracking` module with `schedule/tracking-profiling`. ' +
'Your bundler might have a setting for aliasing both modules. ' +
'Learn more at http://fb.me/react-profiling',
);
}

if (__DEV__) {
didWarnAboutStateTransition = false;
didWarnSetStateChildContext = false;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @emails react-core
* @jest-environment node
*/

'use strict';

describe('ReactTracking', () => {
it('should error if profiling renderer and non-profiling schedule/tracking bundles are combined', () => {
jest.resetModules();

const ReactFeatureFlags = require('shared/ReactFeatureFlags');
ReactFeatureFlags.enableSchedulerTracking = false;

require('schedule/tracking');

ReactFeatureFlags.enableSchedulerTracking = true;

expect(() => require('react-dom')).toThrow(
'Learn more at http://fb.me/react-profiling',
);
});
});
7 changes: 7 additions & 0 deletions packages/schedule/npm/tracking-profiling.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
'use strict';

if (process.env.NODE_ENV === 'production') {
module.exports = require('./cjs/schedule-tracking.profiling.min.js');
} else {
module.exports = require('./cjs/schedule-tracking.development.js');
}
1 change: 1 addition & 0 deletions packages/schedule/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"README.md",
"index.js",
"tracking.js",
"tracking-profiling.js",
"cjs/",
"umd/"
]
Expand Down

0 comments on commit 03ab1ef

Please sign in to comment.