mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
188 lines
6.7 KiB
JavaScript
188 lines
6.7 KiB
JavaScript
"use strict";
|
|
|
|
const { resolve, basename } = require('path');
|
|
const { sync } = require('glob');
|
|
const {
|
|
bundleTypes,
|
|
} = require('./bundles');
|
|
|
|
const exclude = [
|
|
'src/**/__benchmarks__/**/*.js',
|
|
'src/**/__tests__/**/*.js',
|
|
'src/**/__mocks__/**/*.js',
|
|
];
|
|
|
|
function createModuleMap(paths) {
|
|
const moduleMap = {};
|
|
|
|
paths.forEach(path => {
|
|
const files = sync(path, exclude);
|
|
|
|
files.forEach(file => {
|
|
const moduleName = basename(file, '.js');
|
|
|
|
moduleMap[moduleName] = resolve(file);
|
|
});
|
|
});
|
|
return moduleMap;
|
|
}
|
|
|
|
function getExternalModules(bundleType) {
|
|
switch (bundleType) {
|
|
case bundleTypes.DEV:
|
|
case bundleTypes.PROD:
|
|
return {
|
|
'object-assign': resolve('./node_modules/object-assign/index.js'),
|
|
};
|
|
case bundleTypes.NODE:
|
|
case bundleTypes.FB:
|
|
case bundleTypes.RN:
|
|
return {};
|
|
}
|
|
}
|
|
|
|
function ignoreFBModules() {
|
|
return [
|
|
// Shared mutable state.
|
|
// We forked an implementation of this into forwarding/.
|
|
'react/lib/ReactCurrentOwner',
|
|
'ReactCurrentOwner',
|
|
// At FB, we don't know them statically:
|
|
'ReactFeatureFlags',
|
|
'ReactDOMFeatureFlags',
|
|
// At FB, we fork this module for custom reporting flow:
|
|
'ReactErrorUtils',
|
|
];
|
|
}
|
|
|
|
function getCommonInternalModules() {
|
|
// we tell Rollup where these files are located internally, otherwise
|
|
// it doesn't pick them up and assumes they're external
|
|
return {
|
|
reactProdInvariant: resolve('./src/shared/utils/reactProdInvariant.js'),
|
|
'ReactComponentTreeHook': resolve('./src/isomorphic/hooks/ReactComponentTreeHook.js'),
|
|
'react/lib/checkPropTypes': resolve('./src/isomorphic/classic/types/checkPropTypes.js'),
|
|
'react/lib/ReactDebugCurrentFrame': resolve('./src/isomorphic/classic/element/ReactDebugCurrentFrame.js'),
|
|
'react/lib/ReactComponentTreeHook': resolve('./src/isomorphic/hooks/ReactComponentTreeHook.js'),
|
|
};
|
|
}
|
|
|
|
function getInternalModules(bundleType) {
|
|
switch (bundleType) {
|
|
case bundleTypes.DEV:
|
|
case bundleTypes.PROD:
|
|
// for DEV and PROD UMD bundles we also need to bundle ReactCurrentOwner
|
|
return Object.assign(getCommonInternalModules(), {
|
|
'ReactCurrentOwner': resolve('./src/isomorphic/classic/element/ReactCurrentOwner.js'),
|
|
'react/lib/ReactCurrentOwner': resolve('./src/isomorphic/classic/element/ReactCurrentOwner.js'),
|
|
});
|
|
case bundleTypes.NODE:
|
|
case bundleTypes.FB:
|
|
return getCommonInternalModules();
|
|
case bundleTypes.RN:
|
|
return {};
|
|
}
|
|
}
|
|
|
|
function replaceInternalModules(bundleType) {
|
|
switch (bundleType) {
|
|
case bundleTypes.DEV:
|
|
case bundleTypes.PROD:
|
|
case bundleTypes.NODE:
|
|
case bundleTypes.FB:
|
|
case bundleTypes.RN:
|
|
// we inline these modules in the bundles rather than leave them as external
|
|
return {
|
|
'react-dom/lib/ReactPerf': resolve('./src/renderers/shared/ReactPerf.js'),
|
|
'react-dom/lib/ReactTestUtils': resolve('./src/test/ReactTestUtils.js'),
|
|
'react-dom/lib/ReactInstanceMap': resolve('./src/renderers/shared/shared/ReactInstanceMap.js'),
|
|
'react-dom': resolve('./src/renderers/dom/ReactDOM.js'),
|
|
};
|
|
}
|
|
}
|
|
|
|
function getFbjsModuleAliases(bundleType) {
|
|
switch (bundleType) {
|
|
case bundleTypes.DEV:
|
|
case bundleTypes.PROD:
|
|
return {
|
|
// we want to bundle these modules, so we re-alias them to the actual
|
|
// file so Rollup can bundle them up
|
|
'fbjs/lib/warning': resolve('./node_modules/fbjs/lib/warning.js'),
|
|
'fbjs/lib/invariant': resolve('./node_modules/fbjs/lib/invariant.js'),
|
|
'fbjs/lib/emptyFunction': resolve('./node_modules/fbjs/lib/emptyFunction.js'),
|
|
'fbjs/lib/emptyObject': resolve('./node_modules/fbjs/lib/emptyObject.js'),
|
|
'fbjs/lib/hyphenateStyleName': resolve('./node_modules/fbjs/lib/hyphenateStyleName.js'),
|
|
'fbjs/lib/getUnboundedScrollPosition': resolve('./node_modules/fbjs/lib/getUnboundedScrollPosition.js'),
|
|
'fbjs/lib/camelizeStyleName': resolve('./node_modules/fbjs/lib/camelizeStyleName.js'),
|
|
'fbjs/lib/containsNode': resolve('./node_modules/fbjs/lib/containsNode.js'),
|
|
'fbjs/lib/shallowEqual': resolve('./node_modules/fbjs/lib/shallowEqual.js'),
|
|
'fbjs/lib/getActiveElement': resolve('./node_modules/fbjs/lib/getActiveElement.js'),
|
|
'fbjs/lib/focusNode': resolve('./node_modules/fbjs/lib/focusNode.js'),
|
|
'fbjs/lib/EventListener': resolve('./node_modules/fbjs/lib/EventListener.js'),
|
|
'fbjs/lib/memoizeStringOnly': resolve('./node_modules/fbjs/lib/memoizeStringOnly.js'),
|
|
'fbjs/lib/ExecutionEnvironment': resolve('./node_modules/fbjs/lib/ExecutionEnvironment.js'),
|
|
'fbjs/lib/createNodesFromMarkup': resolve('./node_modules/fbjs/lib/createNodesFromMarkup.js'),
|
|
'fbjs/lib/performanceNow': resolve('./node_modules/fbjs/lib/performanceNow.js'),
|
|
};
|
|
case bundleTypes.NODE:
|
|
case bundleTypes.FB:
|
|
case bundleTypes.RN:
|
|
// for FB we don't want to bundle the above modules, instead keep them
|
|
// as external require() calls in the bundle
|
|
return {};
|
|
}
|
|
}
|
|
|
|
function ignoreReactNativeModules() {
|
|
return [
|
|
// This imports NativeMethodsMixin, causing
|
|
// a circular dependency.
|
|
'View',
|
|
];
|
|
}
|
|
|
|
function replaceFbjsModuleAliases(bundleType) {
|
|
switch (bundleType) {
|
|
case bundleTypes.DEV:
|
|
case bundleTypes.PROD:
|
|
case bundleTypes.NODE:
|
|
case bundleTypes.RN:
|
|
return {};
|
|
case bundleTypes.FB:
|
|
// the diff for Haste to support fbjs/lib/* hasn't landed, so this
|
|
// re-aliases them back to the non fbjs/lib/* versions
|
|
return {
|
|
'fbjs/lib/warning': 'warning',
|
|
'fbjs/lib/invariant': 'invariant',
|
|
'fbjs/lib/emptyFunction': 'emptyFunction',
|
|
'fbjs/lib/emptyObject': 'emptyObject',
|
|
'fbjs/lib/hyphenateStyleName': 'hyphenateStyleName',
|
|
'fbjs/lib/getUnboundedScrollPosition': 'getUnboundedScrollPosition',
|
|
'fbjs/lib/camelizeStyleName': 'camelizeStyleName',
|
|
'fbjs/lib/containsNode': 'containsNode',
|
|
'fbjs/lib/shallowEqual': 'shallowEqual',
|
|
'fbjs/lib/getActiveElement': 'getActiveElement',
|
|
'fbjs/lib/focusNode': 'focusNode',
|
|
'fbjs/lib/EventListener': 'EventListener',
|
|
'fbjs/lib/memoizeStringOnly': 'memoizeStringOnly',
|
|
'fbjs/lib/ExecutionEnvironment': 'ExecutionEnvironment',
|
|
'fbjs/lib/createNodesFromMarkup': 'createNodesFromMarkup',
|
|
'fbjs/lib/performanceNow': 'performanceNow',
|
|
'react/lib/ReactCurrentOwner': 'ReactCurrentOwner',
|
|
"'react'": "'React'",
|
|
};
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
createModuleMap,
|
|
getExternalModules,
|
|
replaceInternalModules,
|
|
getInternalModules,
|
|
getFbjsModuleAliases,
|
|
replaceFbjsModuleAliases,
|
|
ignoreFBModules,
|
|
ignoreReactNativeModules,
|
|
};
|