1 | const path = require('path')
|
2 | const chalk = require('chalk');
|
3 | const Table = require('easy-table')
|
4 |
|
5 | const sh = require('execa').shell
|
6 | const cwd = process.cwd()
|
7 |
|
8 | const 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 |
|
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 |
|
58 | module.exports = function () {
|
59 | let packageConfig = require(path.join(cwd, './package.json'))
|
60 | printPackageVersionDiff(packageConfig['dependencies'], 'dependencies')
|
61 | printPackageVersionDiff(packageConfig['devDependencies'], 'devDependencies')
|
62 | }
|