1 | const { join } = require('path')
|
2 | const fs = require('fs-extra')
|
3 | const inquirer = require('inquirer')
|
4 | const { info, success, error } = require('../utils/tip')
|
5 | const { shell } = require('execa')
|
6 | const getSpinner = require('../utils/getSpinner')
|
7 | const { setPkgJson } = require('../utils/fire')
|
8 | const install = require('../utils/install')
|
9 | module.exports = async function() {
|
10 | let projectName = process.argv[3] || ''
|
11 | if (!projectName.trim()) {
|
12 | const { _projectName } = await inquirer.prompt([
|
13 | {
|
14 | type: 'input',
|
15 | message: 'What project do you want to create:',
|
16 | name: '_projectName',
|
17 | validate(val) {
|
18 | return val.trim() ? true : 'you must provide a project name'
|
19 | }
|
20 | }
|
21 | ])
|
22 | projectName = _projectName
|
23 | }
|
24 | await createProject(projectName)
|
25 | }
|
26 | async function createProject(projectName) {
|
27 | const cwd = process.cwd()
|
28 | const projectPath = join(cwd, projectName)
|
29 | let generateSpinner = getSpinner('Creating... ')
|
30 | try {
|
31 | info(`\n start to create project '${projectName}',wait for a moment`)
|
32 | generateSpinner.start()
|
33 | await shell(
|
34 | `git clone git@git.2dfire-inc.com:danfan/vue-boilerplate.git ${projectName}`
|
35 | )
|
36 | await fs.remove(join(projectPath, '.git'))
|
37 | setPkgJson(projectName)
|
38 | await install(projectPath)
|
39 | generateSpinner.stop()
|
40 | success('\n √ create completed!')
|
41 | success(`\n cd ${projectName}`)
|
42 | success('\n npm start or yarn start')
|
43 | } catch (e) {
|
44 | generateSpinner.stop()
|
45 | error(e)
|
46 | }
|
47 | }
|