UNPKG

ionic

Version:

A tool for creating and developing Ionic Framework mobile apps.

383 lines (314 loc) • 10.4 kB
var path = require('path'); var shelljs = require('shelljs'); var os = require('os'); var semver = require('semver'); var log = require('./logging').logger; var Info = module.exports; var requirements = { node: '>=0.12.x', cordova: '>=4.2.0' }; Info.getMacInfo = function getMacInfo() { // Need to get: // Look up for what version (Yosemite, Mavericks, Mountain Lion) // What version of Xcode var macVersion = 'El Capitan'; switch (os.release().split('.')[0]) { case '16': macVersion = 'Sierra'; break; case '15': macVersion = 'El Capitan'; break; case '14': macVersion = 'Yosemite'; break; case '13': macVersion = 'Mavericks'; break; case '12': macVersion = 'Mountain Lion'; break; case '11': macVersion = 'Lion'; break; case '10': macVersion = 'Snow Leopard'; break; } return 'Mac OS X ' + macVersion; }; Info.getCordovaInfo = function getCordovaInfo(info) { var command = 'cordova -v'; var result = shelljs.exec(command, { silent: true }); if (result.code !== 0) { info.cordova = 'Not installed'; return; } info.cordova = result.output.replace('\n', ''); }; Info.getXcodeInfo = function getXcodeInfo() { var result = shelljs.exec('/usr/bin/xcodebuild -version', { silent: true }); if (result.code !== 0) { return 'Not installed'; } var version = result.output.replace(/\n/g, ' '); return version; }; Info.getIosSimInfo = function getIosSimInfo() { var result = shelljs.exec('ios-sim --version', { silent: true }); if (result.code !== 0) { return 'Not installed'; } var version = result.output.replace(/\n/g, ' '); return version; }; Info.getIosDeployInfo = function getIosDeployInfo() { var result = shelljs.exec('ios-deploy --version', { silent: true }); if (result.code !== 0) { return 'Not installed'; } var version = result.output.replace(/\n/g, ' '); return version; }; Info.getIonicCliVersion = function getIonicCliVersion(info, ionicCliPath) { try { var ionicCliPackageJsonPath = path.join(ionicCliPath, 'package.json'); var ionicCliPackageJson = require(ionicCliPackageJsonPath); info.ionic_cli = ionicCliPackageJson.version; // eslint-disable-line camelcase } catch (ex) {} // eslint-disable-line no-empty }; Info.getIonicAppScriptsVersion = function getIonicAppScriptsVersion(info, appDirectory) { log.info('--------------------------------'); try { var packageJson = require(path.resolve(appDirectory, 'node_modules', '@ionic', 'app-scripts', 'package.json')); var ionicAppScriptsVersion = packageJson.version; info.ionic_app_scripts = ionicAppScriptsVersion; // eslint-disable-line camelcase } catch (ex) {} // eslint-disable-line no-empty }; Info.getIonicLibVersion = function getIonicLibVersion(info) { try { var packageJson = require(path.resolve(__dirname, '../package.json')); var ionicLibVersion = packageJson.version; info.ionic_lib = ionicLibVersion; // eslint-disable-line camelcase } catch (ex) {} // eslint-disable-line no-empty }; Info.getIonicVersion = function getIonicVersion(info, appDirectory) { var packageJson; try { packageJson = require(path.join(appDirectory, 'node_modules', 'ionic-angular', 'package.json')); info.ionic = packageJson.version; return; } catch (ex) {} // eslint-disable-line no-empty try { packageJson = require(path.join(appDirectory, 'node_modules', 'ionic-framework', 'package.json')); info.ionic = packageJson.version; return; } catch (ex) {} // eslint-disable-line no-empty try { var ionicVersionJson = require(path.join(appDirectory, 'www/lib/ionic/version.json')); info.ionic = ionicVersionJson.version; return; } catch (ex) {} // eslint-disable-line no-empty try { var ionicBowerJson = require(path.join(appDirectory, 'www', 'lib', 'ionic', 'bower.json')); info.ionic = ionicBowerJson.version; } catch (ex) {} // eslint-disable-line no-empty }; // Windows XP 5.1.2600 // Windows Server 2003 5.2.3790 // Windows Vista // Windows Server 2008 6.0.6000 // Windows Vista, SP2 6.0.6002 // Windows 7 // Windows Server 2008 R2 6.1.7600 // Windows 7 SP1 // Windows Server 2008 R2 SP1 6.1.7601 // Windows 8 // Windows Server 2012 6.2.9200 // Windows 8.1 // Windows Server 2012 R2 6.3.9600 // Windows 10 Technical Preview 6.4.9841 Info.getWindowsEnvironmentInfo = function getWindowsEnvironmentInfo() { // Windows version reference // http://en.wikipedia.org/wiki/Ver_%28command%29 var version = os.release(); var windowsVersion = null; switch (version) { case '5.1.2600': windowsVersion = 'Windows XP'; break; case '6.0.6000': windowsVersion = 'Windows Vista'; break; case '6.0.6002': windowsVersion = 'Windows Vista SP2'; break; case '6.1.7600': windowsVersion = 'Windows 7'; break; case '6.1.7601': windowsVersion = 'Windows 7 SP1'; break; case '6.2.9200': windowsVersion = 'Windows 8'; break; case '6.3.9600': windowsVersion = 'Windows 8.1'; break; } return windowsVersion; }; Info.getLinuxEnvironmentInfo = function getLinuxEnvironmentInfo() { var result = shelljs.exec('lsb_release -id', { silent: true }); return result.output.replace(/\n/g, ' '); }; // http://stackoverflow.com/questions/6551006/get-my-os-from-the-node-js-shell Info.getOsEnvironment = function getOsEnvironment(info) { switch (os.type()) { case 'Darwin': info.os = Info.getMacInfo(); info.xcode = Info.getXcodeInfo(); info.ios_sim = Info.getIosSimInfo(); // eslint-disable-line camelcase info.ios_deploy = Info.getIosDeployInfo(); // eslint-disable-line camelcase break; case 'Windows_NT': info.os = Info.getWindowsEnvironmentInfo(); break; case 'Linux': info.os = Info.getLinuxEnvironmentInfo(); break; } }; Info.getNodeVersion = function getNodeVersion(info) { info.node = process.version; }; Info.gatherGulpInfo = function gatherGulpInfo(info) { var result = shelljs.exec('gulp -v', { silent: true }); try { if (result.code === 0) { var gulpVersions = result.output.replace(/(\[.*\])/g, '').split('\n'); if (gulpVersions.length > 0) { info.gulp = gulpVersions[0]; info.gulp_local = gulpVersions[1]; // eslint-disable-line camelcase } } } catch (ex) {} // eslint-disable-line no-empty }; Info.gatherInfo = function gatherInfo() { var info = {}; // For macs we want: // Mac version, xcode version (if installed) // For windows // Windows version // For all // Android SDK info // Cordova CLI info // Ionic CLI version // Ionic version // var info = { // cordova: 'CLI v3.5.0', // os: 'Mac OSX Yosemite', // xcode: 'Xcode 6.1.1', // ionic: '1.0.0-beta.13', // ionic_cli: '1.3.0' // }; Info.getIonicLibVersion(info); Info.getIonicAppScriptsVersion(info); Info.getNodeVersion(info); Info.getOsEnvironment(info); Info.getCordovaInfo(info); Info.gatherGulpInfo(info); return info; }; Info.printInfo = function printInfo(info) { log.info('\nYour system information:\n'); log.info('Cordova CLI:', info.cordova); if (info.gulp) { log.info('Gulp version:', info.gulp); log.info('Gulp local: ', info.gulp_local); } if (info.ionic) { log.info('Ionic Framework Version:', info.ionic); } if (info.ionic_cli) { log.info('Ionic CLI Version:', info.ionic_cli); } if (info.ionic_lib) { log.info('Ionic App Lib Version:', info.ionic_lib); } if (info.ionic_app_scripts) { log.info('Ionic App Scripts Version:', info.ionic_app_scripts); } if (info.ios_deploy) { log.info('ios-deploy version:', info.ios_deploy); } if (info.ios_sim) { log.info('ios-sim version:', info.ios_sim); } log.info('OS:', info.os); log.info('Node Version:', info.node); if (info.xcode) { log.info('Xcode version:', info.xcode); } log.info('\n'); }; Info.checkRuntime = function checkRuntime() { var info = this.gatherInfo(); var iosDeployInstalled = false; var iosSimInstalled = false; var cordovaInstalled = false; var cordovaUpgrade = false; var nodeUpgrade = false; var validRuntime = true; try { nodeUpgrade = !semver.satisfies(info.node, requirements.node); cordovaUpgrade = !semver.satisfies(info.cordova, requirements.cordova); cordovaInstalled = true; // if it throws above, we know cordova is not installed } catch (ex) {} // eslint-disable-line no-empty log.debug('System Info:', info); if (info.ios_sim !== 'Not installed') { iosSimInstalled = true; } if (info.ios_deploy !== 'Not installed') { iosDeployInstalled = true; } var checkOsx = process.platform === 'darwin'; var checkOsxDeps = checkOsx && (!iosSimInstalled || !iosDeployInstalled); // console.log('nodeUpgrade', nodeUpgrade, 'cordovaUpgrade', cordovaUpgrade, 'cordovaInstalled', cordovaInstalled); var showDepdencyWarning = nodeUpgrade || (!cordovaInstalled || cordovaUpgrade) || checkOsxDeps; if (showDepdencyWarning) { log.warn('******************************************************'); log.warn(' Dependency warning - for the CLI to run correctly, '); log.warn(' it is highly recommended to install/upgrade the following: '); log.warn(''); if (nodeUpgrade) { var updateMessage = [' Please update your Node runtime to version ', requirements.node].join(' '); log.warn(updateMessage); validRuntime = false; } if (!cordovaInstalled || cordovaUpgrade) { var action = cordovaInstalled ? 'update' : 'install'; updateMessage = [' Please', action, 'your Cordova CLI to version ', requirements.cordova, '`npm install -g cordova`'].join(' '); log.warn(updateMessage); validRuntime = false; } if (info.ios_sim === 'Not installed') { log.warn(' Install ios-sim to deploy iOS applications.' + '`npm install -g ios-sim` (may require sudo)'); } if (info.ios_deploy === 'Not installed') { log.warn(' Install ios-deploy to deploy iOS applications to devices. ' + ' `npm install -g ios-deploy` (may require sudo)'); } log.warn(''); log.warn('******************************************************'); } return validRuntime; }; Info.run = function run() { var info = Info.gatherInfo(); Info.printInfo(info); Info.checkRuntime(); };