node 版本检查 小tip

2017-05-07  本文已影响0人  前端大飞
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框架中学习了一二,分享给大家。

上一篇 下一篇

猜你喜欢

热点阅读