check-versions.jsnode
//定製控制檯日誌的輸入樣式 var chalk = require('chalk') // 加載語義化版本測試庫 var semver = require('semver') // 引入package.json文件 var packageConfig = require('../package.json') function exec(cmd) { // require('child_process')調用nodejs子進程, // execSync同步的exec方法執行command return require('child_process').execSync(cmd).toString().trim() } var versionRequirements = [{ name: 'node', // process.version是當前使用的node版本信息'v7.1.0' // semver.clean(' =v1.2.3 ')返回'1.2.3' // semver.clean(process.version)格式化返回當前使用的node版本信息'7.1.0' currentVersion: semver.clean(process.version), // 從package.json讀取node版本要求 versionRequirement: packageConfig.engines.node }, { name: 'npm', currentVersion: exec('npm --version'), // 從package.json讀取npm版本要求 versionRequirement: packageConfig.engines.npm }] module.exports = function() { var warnings = [] for (var i = 0; i < versionRequirements.length; i++) { var mod = versionRequirements[i] // 判斷現有版本是否知足要求 if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { warnings.push(mod.name + ': ' + chalk.red(mod.currentVersion) + ' should be ' + chalk.green(mod.versionRequirement) ) } } // 打印錯誤信息 if (warnings.length) { console.log('') console.log(chalk.yellow('To use this template, you must update following to modules:')) console.log() for (var i = 0; i < warnings.length; i++) { var warning = warnings[i] console.log(' ' + warning) } console.log() // 按照linux的規範,通常成功用0表示,而非0則表示失敗。存在不知足版本要求的模塊,執行失敗 process.exit(1) } }