build 資料夾中的 check-versions.js
阿新 • • 發佈:2020-12-02
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 }