UNPKG

2.92 kBJavaScriptView Raw
1const cwd = process.cwd()
2
3const fs = require('fs-extra')
4const path = require('path')
5const { execSync } = require('child_process')
6const inquirer = require('inquirer')
7const ora = require('ora')
8// const pacote = require('pacote')
9const download = require('download')
10
11const { resolveCwd } = require('../lib/utils')
12const { log } = require('../lib/log')
13const registerLogger = require('../lib/register-logger')
14
15init()
16registerLogger('init', process)
17
18async 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 // git init
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
67async 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 * @param {String} dist 项目目录
85 */
86function 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}