UNPKG

2.2 kBJavaScriptView Raw
1const path = require('path')
2const chalk = require('chalk');
3const Table = require('easy-table')
4
5const sh = require('execa').shell
6const cwd = process.cwd()
7
8const printPackageVersionDiff = function(depsMap, from){
9 let depsKey = Object.keys(depsMap || {})
10 if(!depsKey.length){ return }
11 let tablePrinter = new Table
12 let tableData = []
13 //获取本地包版本号
14 depsKey.forEach(name=>{
15 let moduleItem = {
16 name: name,
17 package: depsMap[name].replace('^', '')
18 }
19 try {
20 let localModuleJson = require(path.join(cwd, `./node_modules/${name}/package.json`))
21 moduleItem['local'] = localModuleJson['version']
22 } catch(e) {
23 moduleItem['local'] = ''
24 }
25 tableData.push(moduleItem)
26 })
27 //获取最新包版本
28 let getLastestVersionTasks = []
29 let lastestVersionMap = {}
30 tableData.forEach(item=>{
31 getLastestVersionTasks.push(sh(`npm show ${item.name} version`).then(result=>{
32 lastestVersionMap[item['name']] = result['stdout']
33 }))
34 })
35 Promise.all(getLastestVersionTasks).then(result=>{
36 //格式化显示
37 tableData.forEach((item)=>{
38 tablePrinter.cell(`包名称(${from})`, chalk.grey(item['name']))
39 //本地版本号
40 let isSameVersion = (item['package'] == item['local'])
41 if(item['local']) {
42 tablePrinter.cell('本地包版本', chalk[isSameVersion ? 'grey' : 'yellow'](item['local'] + '(本地)'))
43 } else {
44 tablePrinter.cell('本地包版本', chalk.red('本地包未找到'))
45 }
46 //package.json版本号
47 tablePrinter.cell('package.json声明版本', chalk[isSameVersion ? 'grey' : 'yellow'](item['package'] + '(package.json)'))
48
49 let lastestVersion = lastestVersionMap[item['name']]
50 tablePrinter.cell('最新包版本', chalk[item['package'] == lastestVersion ? 'grey' : 'red'](lastestVersion + '(最新)'))
51 tablePrinter.cell('地址', chalk.grey(`https://www.npmjs.com/package/${item['name']}`))
52 tablePrinter.newRow()
53 })
54 console.log('\n' + tablePrinter.toString())
55 })
56}
57
58module.exports = function () {
59 let packageConfig = require(path.join(cwd, './package.json'))
60 printPackageVersionDiff(packageConfig['dependencies'], 'dependencies')
61 printPackageVersionDiff(packageConfig['devDependencies'], 'devDependencies')
62}