const npmCheck = require('npm-check') const compareVersions = require('compare-versions'); const exec = require('child_process').exec; npmCheck() .then(currentState => { packages = currentState.get('packages') packages.forEach(p => { const { moduleName, latest, installed } = p if (moduleName === 'expo' && compareVersions(latest, installed) >= 1) { console.log('\x1b[31m', `Latest version of expo is ${latest}, but you are running ${installed}. Please run: expo upgrade`, '\x1b[0m') } }) }) .then(() => new Promise((resolve) => { exec('node -v', (err, nodeVersion, stdErr) => { nodeVersion = nodeVersion.trim().substring(1) const supportedNode = '14.17.0' if (compareVersions(supportedNode, nodeVersion) >= 1) { console.log('\x1b[31m', `You should have node version ${supportedNode} or later. Please download the latest version`, '\x1b[0m') process.exit(1) } resolve() }) })) .then(() => new Promise((resolve) => { exec('npm -v', (err, npmVersion, stdErr) => { npmVersion = npmVersion.trim() const supportedNpm = '7.16.0' if (compareVersions(supportedNpm, npmVersion) >= 1) { console.log('\x1b[31m', `You should have npm version ${supportedNpm} or later. Please run: npm install -g npm@latest`, '\x1b[0m') process.exit(1) } resolve() }) })) .then(() => new Promise((resolve) => { exec('expo-cli --version', (err, expoCliVersion, stdErr) => { const supportedExpoCli = '4.5.2' expoCliVersion = expoCliVersion.trim() if (err || compareVersions(supportedExpoCli, expoCliVersion) >= 1) { console.log('\x1b[31m', `You should have globally installed expo-cli version ${supportedExpoCli} or later. Please run: npm i -g expo-cli@latest`, '\x1b[0m') process.exit(1) } resolve() }) }))