abao-cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +47 -0
- package/commands/add.js +47 -0
- package/commands/del.js +30 -0
- package/commands/init.js +44 -0
- package/commands/list.js +9 -0
- package/package.json +19 -0
- package/utils/file.js +29 -0
- package/utils/table.js +23 -0
- package/utils/temp.json +0 -0
package/bin/cli.js
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
|
3
|
+
const { program } = require("commander")
|
4
|
+
|
5
|
+
const packageConfig = require("../package.json")
|
6
|
+
|
7
|
+
const { showList } = require("../commands/list")
|
8
|
+
|
9
|
+
const { add } = require("../commands/add")
|
10
|
+
|
11
|
+
const { del } = require("../commands/del")
|
12
|
+
|
13
|
+
const { init } = require("../commands/init")
|
14
|
+
|
15
|
+
program.version(packageConfig.version).option("-v, --version")
|
16
|
+
|
17
|
+
program.name("my-command").usage("可执行命令")
|
18
|
+
|
19
|
+
program
|
20
|
+
.command("ls")
|
21
|
+
.description("查看模板列表")
|
22
|
+
.action(() => {
|
23
|
+
showList()
|
24
|
+
})
|
25
|
+
|
26
|
+
program
|
27
|
+
.command("add")
|
28
|
+
.description("添加模板")
|
29
|
+
.action(() => {
|
30
|
+
add()
|
31
|
+
})
|
32
|
+
|
33
|
+
program
|
34
|
+
.command("del")
|
35
|
+
.description("删除模板")
|
36
|
+
.action(() => {
|
37
|
+
del()
|
38
|
+
})
|
39
|
+
|
40
|
+
program
|
41
|
+
.command("init")
|
42
|
+
.description("初始化模板")
|
43
|
+
.action(() => {
|
44
|
+
init()
|
45
|
+
})
|
46
|
+
|
47
|
+
program.parse()
|
package/commands/add.js
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
|
3
|
+
|
4
|
+
const inquirer = require("inquirer")
|
5
|
+
const { readFile, writeFile } = require("../utils/file")
|
6
|
+
const { showTable } = require("../utils/table")
|
7
|
+
exports.add = async () => {
|
8
|
+
|
9
|
+
const tempJson = await readFile()
|
10
|
+
|
11
|
+
const question = [
|
12
|
+
{
|
13
|
+
name: "name",
|
14
|
+
type: "input",
|
15
|
+
message: "请输入模板名称",
|
16
|
+
validate(val) {
|
17
|
+
if (val === '') return '模板名称必填'
|
18
|
+
else if (tempJson.some(item => item.name === val)) return '模板名称已存在'
|
19
|
+
else return true
|
20
|
+
}
|
21
|
+
},
|
22
|
+
{
|
23
|
+
name: "git_url",
|
24
|
+
type: "input",
|
25
|
+
message: "请输入git源地址",
|
26
|
+
validate(val) {
|
27
|
+
if (val === '') return '地址名称必填'
|
28
|
+
else return true
|
29
|
+
}
|
30
|
+
},
|
31
|
+
{
|
32
|
+
name: "branch",
|
33
|
+
type: "input",
|
34
|
+
message: "请输入分支(默认为master)",
|
35
|
+
filter: (val => {
|
36
|
+
if (val === "") return "master"
|
37
|
+
else return val
|
38
|
+
})
|
39
|
+
}
|
40
|
+
]
|
41
|
+
|
42
|
+
inquirer.prompt(question).then(async answer => {
|
43
|
+
const result = tempJson.concat(answer)
|
44
|
+
const isComplete = await writeFile(result);
|
45
|
+
if (isComplete) showTable(result)
|
46
|
+
})
|
47
|
+
}
|
package/commands/del.js
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
|
3
|
+
const inquirer = require("inquirer")
|
4
|
+
const { readFile, writeFile } = require("../utils/file")
|
5
|
+
const { showTable } = require("../utils/table")
|
6
|
+
|
7
|
+
exports.del = async () => {
|
8
|
+
const tempJson = await readFile()
|
9
|
+
const nameArray = (tempJson || []).map(item => item.name)
|
10
|
+
|
11
|
+
if (nameArray.length === 0) return console.log("不存在可以删除的模板")
|
12
|
+
|
13
|
+
const question = [
|
14
|
+
{
|
15
|
+
name: "name",
|
16
|
+
type: "list",
|
17
|
+
choices: nameArray,
|
18
|
+
message: "请选择你要删除的模板"
|
19
|
+
}
|
20
|
+
]
|
21
|
+
|
22
|
+
inquirer.prompt(question).then(async answer => {
|
23
|
+
const { name } = answer
|
24
|
+
const result = (tempJson || []).filter(item => item.name !== name)
|
25
|
+
const isComplete = await writeFile(result)
|
26
|
+
if (isComplete) {
|
27
|
+
showTable(result)
|
28
|
+
}
|
29
|
+
})
|
30
|
+
}
|
package/commands/init.js
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
|
3
|
+
const path = require("path")
|
4
|
+
const ora = require("ora")
|
5
|
+
const inquirer = require("inquirer")
|
6
|
+
const download = require("download-git-repo")
|
7
|
+
const { readFile } = require("../utils/file")
|
8
|
+
// 定义一个loading
|
9
|
+
const spinner = ora("Generate ing...");
|
10
|
+
|
11
|
+
exports.init = async () => {
|
12
|
+
const tempJson = await readFile()
|
13
|
+
const nameArray = (tempJson || []).map(item => item.name)
|
14
|
+
|
15
|
+
const question = [
|
16
|
+
{
|
17
|
+
name: "name",
|
18
|
+
type: "list",
|
19
|
+
choices: nameArray,
|
20
|
+
message: "请选择你要生成的模板"
|
21
|
+
}
|
22
|
+
]
|
23
|
+
|
24
|
+
inquirer.prompt(question).then(async answer => {
|
25
|
+
const { name } = answer
|
26
|
+
const { git_url, branch } = tempJson.find(item => item.name === name)
|
27
|
+
|
28
|
+
console.log('\n');
|
29
|
+
// console.log(`direct:${git_url}#${branch}`);
|
30
|
+
spinner.start();
|
31
|
+
download(`direct:${git_url}#${branch}`, path.join(__dirname, '../test'), { clone: true }, err => {
|
32
|
+
if (err) {
|
33
|
+
console.log(err.message);
|
34
|
+
console.log('\n');
|
35
|
+
// loading 失败
|
36
|
+
spinner.fail("Generate failed");
|
37
|
+
} else {
|
38
|
+
console.log('\n');
|
39
|
+
// loading 成功
|
40
|
+
spinner.succeed("Generate success");
|
41
|
+
}
|
42
|
+
})
|
43
|
+
})
|
44
|
+
}
|
package/commands/list.js
ADDED
package/package.json
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
{
|
2
|
+
"name": "abao-cli",
|
3
|
+
"version": "1.0.0",
|
4
|
+
"description": "",
|
5
|
+
"main": "index.js",
|
6
|
+
"bin": "./index.js",
|
7
|
+
"scripts": {
|
8
|
+
"publish": "npm publish"
|
9
|
+
},
|
10
|
+
"keywords": [],
|
11
|
+
"author": "",
|
12
|
+
"license": "ISC",
|
13
|
+
"dependencies": {
|
14
|
+
"cli-table": "0.3.11",
|
15
|
+
"commander": "10.0.0",
|
16
|
+
"download-git-repo": "3.0.2",
|
17
|
+
"inquirer": "8.2.5"
|
18
|
+
}
|
19
|
+
}
|
package/utils/file.js
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
const path = require("path")
|
2
|
+
const fs = require("fs")
|
3
|
+
|
4
|
+
exports.readFile = () => {
|
5
|
+
return new Promise((resolve, reject) => {
|
6
|
+
fs.readFile(path.join(__dirname, "./temp.json"), "utf-8", (err, data) => {
|
7
|
+
if (err) {
|
8
|
+
console.log(err.message)
|
9
|
+
reject()
|
10
|
+
}
|
11
|
+
|
12
|
+
const result = JSON.parse(data || null) || []
|
13
|
+
resolve(result)
|
14
|
+
})
|
15
|
+
})
|
16
|
+
}
|
17
|
+
|
18
|
+
exports.writeFile = (jsonData) => {
|
19
|
+
return new Promise((resolve, reject) => {
|
20
|
+
|
21
|
+
fs.writeFile(path.join(__dirname, "./temp.json"), JSON.stringify(jsonData), "utf-8", err => {
|
22
|
+
if (err) {
|
23
|
+
console.log(err.message);
|
24
|
+
reject()
|
25
|
+
}
|
26
|
+
resolve(true)
|
27
|
+
})
|
28
|
+
})
|
29
|
+
}
|
package/utils/table.js
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
|
3
|
+
const Table = require("cli-table")
|
4
|
+
|
5
|
+
const tableConfig = {
|
6
|
+
head: ['name', 'git_url', 'branch'],
|
7
|
+
style: {
|
8
|
+
head: ['green']
|
9
|
+
}
|
10
|
+
}
|
11
|
+
|
12
|
+
exports.showTable = (jsonData) => {
|
13
|
+
if (jsonData instanceof Array) {
|
14
|
+
const table = new Table(tableConfig)
|
15
|
+
for (const item of jsonData) {
|
16
|
+
const { name, git_url, branch } = item
|
17
|
+
table.push([name, git_url, branch])
|
18
|
+
}
|
19
|
+
console.log("\n");
|
20
|
+
console.log(table.toString())
|
21
|
+
console.log("\n");
|
22
|
+
}
|
23
|
+
}
|
package/utils/temp.json
ADDED
File without changes
|