diff --git a/lib/util/version.js b/lib/util/version.js index a919fb4646..951837b899 100644 --- a/lib/util/version.js +++ b/lib/util/version.js @@ -14,11 +14,22 @@ function resetWarningFlag() { warnedForMissingVersion = false; } +let cachedDetectedReactVersion; + +function resetDetectedVersion() { + cachedDetectedReactVersion = undefined; +} + function detectReactVersion() { + if (cachedDetectedReactVersion) { + return cachedDetectedReactVersion; + } + try { const reactPath = resolve.sync('react', {basedir: process.cwd()}); const react = require(reactPath); // eslint-disable-line global-require, import/no-dynamic-require - return react.version; + cachedDetectedReactVersion = react.version; + return cachedDetectedReactVersion; } catch (e) { if (e.code === 'MODULE_NOT_FOUND') { if (!warnedForMissingVersion) { @@ -26,7 +37,8 @@ function detectReactVersion() { + 'but the "react" package is not installed. Assuming latest React version for linting.'); warnedForMissingVersion = true; } - return '999.999.999'; + cachedDetectedReactVersion = '999.999.999'; + return cachedDetectedReactVersion; } throw e; } @@ -116,5 +128,6 @@ function testFlowVersion(context, methodVer) { module.exports = { testReactVersion, testFlowVersion, - resetWarningFlag + resetWarningFlag, + resetDetectedVersion }; diff --git a/tests/util/version.js b/tests/util/version.js index ea8a09b490..3e7a0ac561 100644 --- a/tests/util/version.js +++ b/tests/util/version.js @@ -16,6 +16,7 @@ describe('Version', () => { sinon.stub(console, 'error'); expectedErrorArgs = []; versionUtil.resetWarningFlag(); + versionUtil.resetDetectedVersion(); }); afterEach(() => {