UNPKG

3.17 kBPlain TextView Raw
1#! /usr/bin/env node
2
3const program = require('commander')
4const exec = require('child_process').exec
5const execSync = require('child_process').execSync
6const config = require('../config')
7const log = require('../lib/log').log
8const logSuccess = require('../lib/log').logSuccess
9const ora = require('ora')
10const downloadFromGit = require('download-git-repo')
11const copy = require('../lib/copy')
12const resolveCwd = require('../lib/utils').resolveCwd
13const fs = require('fs')
14const rm = require('rimraf')
15
16program
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 */
26const 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 */
56const 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
89if (program.template) {
90 updateBoilerplate()
91 return
92}
93
94if (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}