1 | #! /usr/bin/env node
|
2 |
|
3 | const program = require('commander')
|
4 | const exec = require('child_process').exec
|
5 | const execSync = require('child_process').execSync
|
6 | const config = require('../config')
|
7 | const log = require('../lib/log').log
|
8 | const logSuccess = require('../lib/log').logSuccess
|
9 | const ora = require('ora')
|
10 | const downloadFromGit = require('download-git-repo')
|
11 | const copy = require('../lib/copy')
|
12 | const resolveCwd = require('../lib/utils').resolveCwd
|
13 | const fs = require('fs')
|
14 | const rm = require('rimraf')
|
15 |
|
16 | program
|
17 | .option('-t, --template', '仅更新模板')
|
18 | .option('--cnpm', '使用cnpm来代替npm')
|
19 | .option('--yarn', '使用yarn来代替npm')
|
20 | .option('--npm', '使用npm来代替设置的工具')
|
21 | .parse(process.argv)
|
22 |
|
23 | /**
|
24 | * 更新模板
|
25 | */
|
26 | const updateBoilerplate = () => {
|
27 | return new Promise((resolve, reject) => {
|
28 | downloadFromGit('ishangzu-fe/tofu-boilerplate', resolveCwd('temp'), { clone: false }, err => {
|
29 | if (err) throw err
|
30 |
|
31 | copyAndRemove();
|
32 | })
|
33 |
|
34 | async function copyAndRemove (files) {
|
35 | let arr = []
|
36 |
|
37 | let msgArr_1 = await copy(resolveCwd('temp/' + 'src/views/portal'), resolveCwd('src/views/portal'))
|
38 | let msgArr_2 = await copy(resolveCwd('temp/' + 'src/main.js'), resolveCwd('src/main.js'))
|
39 | let msgArr_3 = await copy(resolveCwd('temp/' + 'src/main.scss'), resolveCwd('src/main.scss'))
|
40 | let msgArr_4 = await copy(resolveCwd('temp/' + '.gitignore'), resolveCwd('.gitignore'))
|
41 |
|
42 | arr = arr.concat(msgArr_1, msgArr_2, msgArr_3, msgArr_4)
|
43 | rm(resolveCwd('temp'), err => {
|
44 | if (err) throw err
|
45 |
|
46 | resolve(arr)
|
47 | })
|
48 | }
|
49 | })
|
50 | }
|
51 |
|
52 | /**
|
53 | * 执行多个命令
|
54 | * @param commandArr
|
55 | */
|
56 | const execParallel = async (commandArr) => {
|
57 | const spinner_1 = new ora('正在升级tofu-boilerplate...').start()
|
58 | const msgs = await updateBoilerplate();
|
59 | log()
|
60 | log('更新了以下文件', 'green')
|
61 | msgs.forEach(msg => {
|
62 | logSuccess(msg)
|
63 | })
|
64 | spinner_1.stop()
|
65 |
|
66 | log()
|
67 | const spinner_2 = new ora('正在升级i-tofu...').start()
|
68 | log()
|
69 | execSync(commandArr[0])
|
70 |
|
71 | spinner_2.text = '正在升级tofu-cli...'
|
72 | let child = exec(commandArr[1], (error, stdout, stderr) => {
|
73 | if (error) {
|
74 | throw error
|
75 | return
|
76 | } else {
|
77 | log()
|
78 | logSuccess('升级tofu-boilerplate成功')
|
79 | logSuccess('升级i-tofu成功')
|
80 | logSuccess('升级tofu-cli成功')
|
81 | spinner_2.stop()
|
82 | }
|
83 | })
|
84 | child.stdout.on('data', msg => {
|
85 | log(msg, 'yellow')
|
86 | })
|
87 | }
|
88 |
|
89 | if (program.template) {
|
90 | updateBoilerplate()
|
91 | return
|
92 | }
|
93 |
|
94 | if (program.cnpm) {
|
95 | execParallel(['cnpm install i-tofu@latest', 'cnpm install -g tofu-cli@latest'])
|
96 | } else if (program.yarn) {
|
97 | execParallel(['yarn add i-tofu@latest', 'yarn global add tofu-cli@latest'])
|
98 | } else if (program.npm) {
|
99 | execParallel(['npm install i-tofu@latest', 'npm install -g tofu-cli@latest'])
|
100 | } else {
|
101 | execParallel([config.tool + ' install i-tofu@latest', config.tool + ' install -g tofu-cli@latest'])
|
102 | }
|