UNPKG

@conecli/cone-cli

Version:

松果编辑器命令行工具

90 lines (82 loc) 2.48 kB
const { execSync } = require('child_process') const semver = require('semver') const shell = require('shelljs') const chalk = require('chalk') const validateProjectName = require('validate-npm-package-name') let _hasYarn let _hasGit // env detection exports.hasYarn = () => { if (_hasYarn != null) { return _hasYarn } try { execSync('yarn --version', { stdio: 'ignore' }) return (_hasYarn = true) } catch (e) { return (_hasYarn = false) } } exports.hasGit = () => { if (_hasGit != null) { return _hasGit } try { execSync('git --version', { stdio: 'ignore' }) return (_hasGit = true) } catch (e) { return (_hasGit = false) } } // OS exports.isWindows = process.platform === 'win32' exports.isMacintosh = process.platform === 'darwin' exports.isLinux = process.platform === 'linux' /** * 检查nodejs版本是否满足要求 */ exports.checkNodeVersion = (wanted, id) => { if (!semver.satisfies(process.version, wanted, { includePrerelease: true })) { console.log(chalk.red( 'You are using Node ' + process.version + ', but this version of ' + id + ' requires Node ' + wanted + '.\nPlease upgrade your Node version.' )) process.exit(1) } } /** * 检查自身是否有更新 * @param {*} localVersion * @param {*} id */ exports.checkVersion = (localVersion, id) => { const result = shell.exec(`npm view ${id} version`, {silent: true}); if (result && result.code === 0) { const latestVersionStr = result.stdout || ''; const latestVersion = latestVersionStr.split('\n')[0] if (semver.lt(localVersion, latestVersion)) { console.log() console.log(chalk.yellow(' A newer version of ' + id + ' is available.')) console.log(' latest: ' + chalk.green(latestVersion)) console.log(' installed: ' + chalk.red(localVersion)) console.log(` use command line: ${chalk.yellow('npm install -g @conecli/cone-cli@latest')} to upgrade.`) console.log() } } } /** * 检查项目名称是否合理 */ exports.checkProjectName = (name) => { const result = validateProjectName(name) if (!result.validForNewPackages) { console.error(chalk.red(`Invalid project name: "${name}"`)) result.errors && result.errors.forEach(err => { console.error(chalk.red.dim('Error: ' + err)) }) result.warnings && result.warnings.forEach(warn => { console.error(chalk.red.dim('Warning: ' + warn)) }) process.exit(1) } }