Skip to content

Commit f7e0db9

Browse files
authored
Build React DOM Fiber package (facebook#7173)
This builds a `react-dom-fiber.js` bundle which exposes ReactDOMFiber. This allows early experiments with the new Fiber reconciler. I also expose it in the npm package through `react-dom/fiber`.
1 parent 0f004ef commit f7e0db9

File tree

5 files changed

+81
-5
lines changed

5 files changed

+81
-5
lines changed

Gruntfile.js

+12
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,16 @@ module.exports = function(grunt) {
137137
'version-check',
138138
'browserify:domServerMin',
139139
]);
140+
grunt.registerTask('build:dom-fiber', [
141+
'build-modules',
142+
'version-check',
143+
'browserify:domFiber',
144+
]);
145+
grunt.registerTask('build:dom-fiber-min', [
146+
'build-modules',
147+
'version-check',
148+
'browserify:domFiberMin',
149+
]);
140150
grunt.registerTask('build:npm-react', [
141151
'version-check',
142152
'build-modules',
@@ -164,6 +174,8 @@ module.exports = function(grunt) {
164174
'browserify:domMin',
165175
'browserify:domServer',
166176
'browserify:domServerMin',
177+
'browserify:domFiber',
178+
'browserify:domFiberMin',
167179
'npm-react:release',
168180
'npm-react:pack',
169181
'npm-react-dom:release',

examples/fiber/index.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ <h1>Fiber Example</h1>
1818
</p>
1919
</div>
2020
<script src="../../build/react.js"></script>
21-
<script src="../../build/react-dom.js"></script>
21+
<script src="../../build/react-dom-fiber.js"></script>
2222
<script>
2323
function ExampleApplication(props) {
2424
var elapsed = Math.round(props.elapsed / 100);
@@ -34,7 +34,7 @@ <h1>Fiber Example</h1>
3434

3535
var start = new Date().getTime();
3636
setInterval(function() {
37-
ReactDOM.render(
37+
ReactDOMFiber.render(
3838
ExampleApplicationFactory({elapsed: new Date().getTime() - start}),
3939
document.getElementById('container')
4040
);

grunt/config/browserify.js

+46
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,18 @@ for (var key in shimSharedModulesFiles) {
3535

3636
var shimSharedModules = globalShim.configure(shimSharedModulesFiles);
3737

38+
// Fiber needs the symbol from ReactElement right now. So we can't shim
39+
// ReactElement. Otherwise this would just be the same as above.
40+
// TODO: Refactor this so that Fiber can access the symbol without bringing in
41+
// the rest of ReactElement.
42+
var shimSharedModulesFiberFiles = {};
43+
for (var key in shimSharedModulesFiles) {
44+
if (!/ReactElement/.test(key)) {
45+
shimSharedModulesFiberFiles[key] = shimSharedModulesFiles[key];
46+
}
47+
}
48+
var shimSharedModulesFiber = globalShim.configure(shimSharedModulesFiberFiles);
49+
3850
var shimDOMModules = aliasify.configure({
3951
'aliases': {
4052
'./ReactAddonsDOMDependencies': {relative: './ReactAddonsDOMDependenciesUMDShim'},
@@ -204,6 +216,38 @@ var domServerMin = {
204216
after: [minify, bannerify],
205217
};
206218

219+
var domFiber = {
220+
entries: [
221+
'./build/node_modules/react-dom/lib/ReactDOMFiber.js',
222+
],
223+
outfile: './build/react-dom-fiber.js',
224+
debug: false,
225+
standalone: 'ReactDOMFiber',
226+
// Apply as global transform so that we also envify fbjs and any other deps
227+
transforms: [shimSharedModulesFiber],
228+
globalTransforms: [envifyDev],
229+
plugins: [collapser],
230+
after: [derequire, simpleBannerify],
231+
};
232+
233+
var domFiberMin = {
234+
entries: [
235+
'./build/node_modules/react-dom/lib/ReactDOMFiber.js',
236+
],
237+
outfile: './build/react-dom-fiber.min.js',
238+
debug: false,
239+
standalone: 'ReactDOMFiber',
240+
// Envify twice. The first ensures that when we uglifyify, we have the right
241+
// conditions to exclude requires. The global transform runs on deps.
242+
transforms: [shimSharedModulesFiber, envifyProd, uglifyify],
243+
globalTransforms: [envifyProd],
244+
plugins: [collapser],
245+
// No need to derequire because the minifier will mangle
246+
// the "require" calls.
247+
248+
after: [minify, bannerify],
249+
};
250+
207251
module.exports = {
208252
basic: basic,
209253
min: min,
@@ -213,4 +257,6 @@ module.exports = {
213257
domMin: domMin,
214258
domServer: domServer,
215259
domServerMin: domServerMin,
260+
domFiber: domFiber,
261+
domFiberMin: domFiberMin,
216262
};

packages/react-dom/fiber.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
'use strict';
2+
3+
module.exports = require('./lib/ReactDOMFiber');

src/renderers/dom/fiber/ReactDOMFiber.js

+18-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import type { HostChildren } from 'ReactFiberReconciler';
1616

1717
var ReactFiberReconciler = require('ReactFiberReconciler');
1818

19+
var warning = require('warning');
20+
1921
type DOMContainerElement = Element & { _reactRootContainer: ?Object };
2022

2123
type Container = Element;
@@ -56,9 +58,9 @@ var DOMRenderer = ReactFiberReconciler({
5658
},
5759

5860
prepareUpdate(
59-
domElement : Instance,
60-
oldProps : Props,
61-
newProps : Props,
61+
domElement : Instance,
62+
oldProps : Props,
63+
newProps : Props,
6264
children : HostChildren<Instance>
6365
) : boolean {
6466
return true;
@@ -82,9 +84,21 @@ var DOMRenderer = ReactFiberReconciler({
8284

8385
});
8486

87+
var warned = false;
88+
89+
function warnAboutUnstableUse() {
90+
warning(
91+
warned,
92+
'You are using React DOM Fiber which is an experimental renderer. ' +
93+
'It is likely to have bugs, breaking changes and is unsupported.'
94+
);
95+
warned = true;
96+
}
97+
8598
var ReactDOM = {
8699

87100
render(element : ReactElement<any>, container : DOMContainerElement) {
101+
warnAboutUnstableUse();
88102
if (!container._reactRootContainer) {
89103
container._reactRootContainer = DOMRenderer.mountContainer(element, container);
90104
} else {
@@ -93,6 +107,7 @@ var ReactDOM = {
93107
},
94108

95109
unmountComponentAtNode(container : DOMContainerElement) {
110+
warnAboutUnstableUse();
96111
const root = container._reactRootContainer;
97112
if (root) {
98113
// TODO: Is it safe to reset this now or should I wait since this

0 commit comments

Comments
 (0)