1 | const cwd = process.cwd()
|
2 |
|
3 | const fs = require('fs-extra')
|
4 | const path = require('path')
|
5 | const { execSync } = require('child_process')
|
6 | const inquirer = require('inquirer')
|
7 | const ora = require('ora')
|
8 |
|
9 | const download = require('download')
|
10 |
|
11 | const { resolveCwd } = require('../lib/utils')
|
12 | const { log } = require('../lib/log')
|
13 | const registerLogger = require('../lib/register-logger')
|
14 |
|
15 | init()
|
16 | registerLogger('init', process)
|
17 |
|
18 | async function init () {
|
19 | const { templateType } = await selectTemplate()
|
20 |
|
21 | const { confirm } = await inquirer.prompt({
|
22 | type: 'confirm',
|
23 | name: 'confirm',
|
24 | message: '确定要将项目创建在当前文件夹吗?'
|
25 | })
|
26 |
|
27 | if (!confirm) return
|
28 |
|
29 | const spinner = ora('正在下载模板文件...')
|
30 | const dist = './'
|
31 | spinner.start()
|
32 | switch (templateType) {
|
33 | case 'PC':
|
34 | name = 'pitaya'
|
35 | break
|
36 | default:
|
37 | break
|
38 | }
|
39 | await download('http://192.168.0.192:8083/isz-pc/tofu-template/repository/archive.zip?ref=dev&private_token=AKM616C1BgXy1SMownRG', dist, { extract: true })
|
40 | const absoluteCWD = path.resolve(cwd)
|
41 | const files = fs.readdirSync(absoluteCWD)
|
42 | let dirname
|
43 | for (file of files) {
|
44 | if (/^tofu\-template.*$/.test(file)) {
|
45 | dirname = file
|
46 | }
|
47 | }
|
48 | const currentPath = path.join(absoluteCWD, dirname)
|
49 | fs.moveSync(currentPath, absoluteCWD)
|
50 |
|
51 |
|
52 | try {
|
53 | execSync('git init')
|
54 | const preCommitPath = path.join(absoluteCWD, '.git/hooks/pre-commit')
|
55 | fs.createFileSync(preCommitPath)
|
56 | fs.writeFileSync(preCommitPath, '#!/bin/sh\nexec tofu lint')
|
57 | fs.chmodSync(preCommitPath, 0755)
|
58 | } catch(err) {
|
59 | console.log('Git init failed!')
|
60 | console.error(err)
|
61 | }
|
62 |
|
63 | spinner.stop()
|
64 | afterDownload()
|
65 | }
|
66 |
|
67 | async function selectTemplate () {
|
68 | return await inquirer.prompt({
|
69 | name: 'templateType',
|
70 | message: '请选择新建的模板类型',
|
71 | type: 'list',
|
72 | default: 0,
|
73 | choices: [
|
74 | 'PC'
|
75 | ]
|
76 | }).catch(err => {
|
77 | console.error('选择模板类型出错')
|
78 | console.error(err)
|
79 | })
|
80 | }
|
81 |
|
82 |
|
83 |
|
84 |
|
85 |
|
86 | function afterDownload () {
|
87 | fs.removeSync(resolveCwd('.npmignore'))
|
88 |
|
89 | log();
|
90 | log('已完成项目的初始化:', 'green');
|
91 | log();
|
92 | log(` 在当前目录中新建了项目`, 'white');
|
93 | log();
|
94 | log('接下来你需要:', 'white');
|
95 | log();
|
96 | log(' npm install', 'white');
|
97 | log(' git init', 'white');
|
98 | log();
|
99 | log('然后你可以:', 'white');
|
100 | log();
|
101 | log(' - tofu server 运行开发服务', 'white');
|
102 | log(' - tofu build 打包项目', 'white');
|
103 | log(' - tofu update 更新框架以及命令行工具至最新版本', 'white');
|
104 | log();
|
105 | }
|