abao-cli 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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()
@@ -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
+ }
@@ -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
+ }
@@ -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
+ }
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { readFile } = require("../utils/file")
4
+ const { showTable } = require("../utils/table")
5
+
6
+ exports.showList = async () => {
7
+ const result = await readFile()
8
+ showTable(result)
9
+ }
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
+ }
File without changes