-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcli.js
More file actions
87 lines (74 loc) · 2.63 KB
/
cli.js
File metadata and controls
87 lines (74 loc) · 2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/env node
const { exec } = require('node:child_process')
const {
mkdir,
writeFile,
readFile,
unlink
} = require('node:fs/promises')
const { existsSync } = require('node:fs')
const { join } = require('node:path')
const { createInterface } = require('node:readline/promises')
const { performance } = require('node:perf_hooks')
const {
electronData,
buildTemplate,
cssTemplate,
htmlTemplate,
vueCoreTemplate,
vueRouterTemplate,
vueApp,
indexPage
} = require('./data')
const rl = createInterface({
input: process.stdin,
output: process.stdout
})
// cmds
const createPkg = 'npm init -y'
const addMainModules = 'npm i -D electron electron-builder --no-package-lock --package-lock-only'
const addSpecialModules = 'npm i vue vue-router --no-package-lock --package-lock-only'
const deletePkgLock = process.platform === 'win32' ? 'del package-lock.json' : 'rm package-lock.json'
// project generator
const createProject = async () => {
const projectName = await rl.question('project name: ')
console.info('\x1b[32mcreating project\x1b[0m')
// master dir
if (existsSync(`./${projectName}`)) {
process.chdir(`${projectName}`)
} else {
await mkdir(`./${projectName}`)
process.chdir(`${projectName}`)
}
const dirs = [
`./app`, `./app/styles`, `./app/images`,
`./app/components`, `./app/pages`, `./icons`,
]
for await (const dir of dirs) { mkdir(dir) }
// create files
await writeFile('./app/preload.js', '')
await writeFile('main.js', electronData)
await writeFile('electron-builder.yml', buildTemplate(projectName))
await writeFile('./app/index.html', htmlTemplate)
await writeFile('./app/renderer.js', vueCoreTemplate)
await writeFile('./app/app.js', vueApp)
await writeFile('./app/styles/main.css', cssTemplate)
await writeFile('./app/router.js', vueRouterTemplate)
await writeFile('./app/pages/Home.js', indexPage)
// comands
exec(`${createPkg} && ${addMainModules} && ${addSpecialModules} && ${deletePkgLock}`)
const timeEnd = performance.now()
setTimeout(async () => {
const packageJSON = JSON.parse(await readFile('package.json'))
packageJSON.scripts.start = 'electron .'
packageJSON['license'] = 'MIT'
delete packageJSON.scripts.test
await writeFile('./package.json', JSON.stringify(packageJSON, null, 2))
console.info(`\x1b[36m${projectName}\x1b[0m project succesful`)
console.info(`now run cd \x1b[36m${projectName}\x1b[0m`)
console.info('for install using npm i or yarn')
}, timeEnd)
rl.close()
}
// init project
createProject()