@wibetter/akfun
Version:
前端脚手架:支持Vue技术栈和react技术栈
54 lines (47 loc) • 1.54 kB
JavaScript
const chalk = require('chalk'); // 带样式的log输出
const semver = require('semver'); // 版本号检测
const shell = require('shelljs'); // 命令执行
const packageConfig = require('../package.json');
function exec(cmd) {
return require('child_process').execSync(cmd).toString().trim();
}
const versionRequirements = [
{
name: 'node',
currentVersion: semver.clean(process.version),
versionRequirement: packageConfig.engines.node
}
];
// 判定npm命令是否可用
if (shell.which('npm')) {
versionRequirements.push({
name: 'npm',
currentVersion: exec('npm --version'),
versionRequirement: packageConfig.engines.npm
});
}
module.exports = function () {
const warnings = [];
for (let i = 0; i < versionRequirements.length; i++) {
const mod = versionRequirements[i];
// 检验当前版本是否在当前支持版本范围内,其中satisfies [ˈsætɪsfaɪz] v.使满意;使满足;满足(要求、需要等);
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('\n');
console.log(chalk.yellow('To use this src, you must update following to modules:'));
console.log('\n');
for (let i = 0; i < warnings.length; i++) {
const warning = warnings[i];
console.log(` ${warning}`);
}
console.log('\n');
process.exit(1);
}
};