mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
Some modules import or have a local global object that is different than the one exported from the Meteor package
71 lines
2.0 KiB
JavaScript
71 lines
2.0 KiB
JavaScript
let enabled = !process.env.DISABLE_REACT_FAST_REFRESH;
|
|
|
|
if (enabled) {
|
|
try {
|
|
// React fast refresh requires react 16.9.0 or newer
|
|
const semverGte = require('semver/functions/gte');
|
|
const pkg = require('react/package.json');
|
|
|
|
enabled = pkg && pkg.version &&
|
|
semverGte(pkg.version, '16.9.0');
|
|
} catch (e) {
|
|
// If the app doesn't directly depend on react, leave react-refresh
|
|
// enabled in case a package or indirect dependency uses react.
|
|
}
|
|
}
|
|
|
|
// Needed for compatibility when build plugins use ReactFastRefresh.babelPlugin
|
|
if (typeof __meteor_runtime_config__ === 'object') {
|
|
__meteor_runtime_config__.reactFastRefreshEnabled = enabled;
|
|
}
|
|
|
|
const babelPlugin = enabled ?
|
|
require('react-refresh/babel') :
|
|
null;
|
|
|
|
// Babel plugin that adds a call to global.___INIT_METEOR_FAST_REFRESH()
|
|
// at the start of every file compiled with react-refresh to ensure the runtime
|
|
// is enabled if it is used.
|
|
function enableReactRefreshBabelPlugin(babel) {
|
|
const { types: t } = babel;
|
|
|
|
return {
|
|
name: "meteor-enable-react-fast-refresh",
|
|
post(state) {
|
|
// This is the path for the Program node
|
|
let path = state.path;
|
|
let method = t.identifier("___INIT_METEOR_FAST_REFRESH");
|
|
let call = t.callExpression(
|
|
method,
|
|
[t.identifier("module")]
|
|
);
|
|
path.unshiftContainer("body", t.expressionStatement(call));
|
|
},
|
|
};
|
|
}
|
|
|
|
let deprecationWarned = false;
|
|
|
|
ReactFastRefresh = {
|
|
get babelPlugin() {
|
|
if (!deprecationWarned) {
|
|
console.warn(
|
|
'ReactFastRefresh.babelPlugin is deprecated and is incompatible with HMR on Cordova. Use ReactFastRefresh.getBabelPluginConfig() instead.'
|
|
);
|
|
deprecationWarned = true;
|
|
}
|
|
|
|
return babelPlugin;
|
|
},
|
|
getBabelPluginConfig() {
|
|
if (!babelPlugin) {
|
|
return [];
|
|
}
|
|
|
|
return [
|
|
[babelPlugin, { skipEnvCheck: true }],
|
|
enableReactRefreshBabelPlugin,
|
|
]
|
|
}
|
|
};
|