build 文件夹中的 check-versions.js

 

 1 //此文件是检查node+npm的版本 在build.js里面使用
 2 'use strict'
 3 const chalk = require('chalk') //导入chalk模块 用来改变字体颜色
 4 const semver = require('semver') //导入semver即语义化版本 用来控制版本
 5 const packageConfig = require('../package.json') //导入package.json,用于获取项目需要node+npm的版本
 6 const shell = require('shelljs') //导入shelljs模块 用来执行unix命令
 7 
 8 //封装方法 用来获取纯净的版本号
 9 //child_process是node用来创建子进程 execSync是创建同步进程
10 function exec(cmd) {
11   return require('child_process').execSync(cmd).toString().trim()
12 }
13 
14 //node版本信息
15 const versionRequirements = [{
16   name: 'node', //名称是Node
17   currentVersion: semver.clean(process.version), //当前的node版本号
18   versionRequirement: packageConfig.engines.node //要求的node版本号
19 }]
20 
21 if (shell.which('npm')) {
22   // 将npm添加到versionRequirements
23   versionRequirements.push({
24     name: 'npm', //名称是npm
25     currentVersion: exec('npm --version'), //纯净的当前npm版本号
26     versionRequirement: packageConfig.engines.npm //要求的npm版本号
27   })
28 }
29 
30 module.exports = function () {
31   const warnings = []
32 
33   for (let i = 0; i < versionRequirements.length; i++) {
34     const mod = versionRequirements[i]
35 
36     // 如果当前版本号不符合要求的版本号,那么就将提示信息添加到wranings
37     if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
38       warnings.push(mod.name + ': ' +
39         chalk.red(mod.currentVersion) + ' should be ' +
40         chalk.green(mod.versionRequirement)
41       )
42     }
43   }
44 
45   // 如果有 warnings 那么就打印出来
46   if (warnings.length) {
47     console.log('')
48     console.log(chalk.yellow('To use this template, you must update following to modules:'))
49     console.log()
50 
51     for (let i = 0; i < warnings.length; i++) {
52       const warning = warnings[i]
53       console.log('  ' + warning)
54     }
55 
56     console.log()
57 
58     //执行失败
59     process.exit(1)
60   }
61 }

 

posted @ 2020-12-02 16:38  思猿客  阅读(328)  评论(0编辑  收藏  举报