1.我要讲啥
一般一个框架或者一个package,都会有版本的概念,也就是会考虑到兼容性,对于新老特性的支持程度具有差异性。那么,问题来了,你的框架怎么给用户一个友好的提示呢,而不只是是“冷冷的”告诉你的用户,失败了,丢下一个抓耳挠腮的程序员。。。
2.你要做啥
node.js版本的检查,npm或者yarn版本(最近入的新坑,从npm跳入到yarn)的检查。检查到后呢,友好的提示啊!!!
直接上代码
var chalk = require('chalk')
var semver = require('semver')
var packageConfig = require('../package.json')
var shell = require('shelljs')
不要急,慢慢来。这个过程,需要用到chalk,semver,shell,三个npm package。这三个干嘛用的呢,简单提一句,chalk,用于美化你的命令行log,semver用户操作版本version的简单工具包,shell,则是命令行执行的node包。欲知详情,npm搜一下,自行科普吧。
好了,该干正事了,三步走策略。
1. 检查是否安装
shell.which('npm'); // 检查命令行是否存在npm命令,也就是是否在环境变量中
2. 检查版本
/**
* 执行bin命令
/*
function exec (cmd) {
return require('child_process').execSync(cmd).toString().trim()
}
exec('npm --version');
semver.satisfies(mod.currentVersion, mod.versionRequirement);// 其中currentVersion是当前检测到的版本号,versionRequirement是package.json中声明的版本号。
3. 错误提示
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()
process.exit(1)
}
}
上述就是简单的版本检查的全部流程,小僧也只是从vue-cli的webpack框架中学习了一二,分享给大家。