diff --git a/README.MD b/README.MD index 702715f..f772f25 100644 --- a/README.MD +++ b/README.MD @@ -41,6 +41,7 @@ Commands: * [x] 代码整理 * [x] 同步功能 * [x] 可展示表格`pp list --table` +* [x] 增加`inquirer`自定义项目变量(beta) TODO diff --git a/dist/pp.cjs.js b/dist/pp.cjs.js index 6d72304..577702b 100644 --- a/dist/pp.cjs.js +++ b/dist/pp.cjs.js @@ -12,6 +12,8 @@ var uuid = require('uuid'); var download = require('download-git-repo'); var ejs = require('ejs'); var Table = require('cli-table3'); +var inquirer = require('inquirer'); +var types = require('util/types'); var fetch = require('node-fetch'); var qs = require('qs'); var ora = require('ora'); @@ -27,6 +29,7 @@ var uuid__default = /*#__PURE__*/_interopDefaultLegacy(uuid); var download__default = /*#__PURE__*/_interopDefaultLegacy(download); var ejs__default = /*#__PURE__*/_interopDefaultLegacy(ejs); var Table__default = /*#__PURE__*/_interopDefaultLegacy(Table); +var inquirer__default = /*#__PURE__*/_interopDefaultLegacy(inquirer); var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch); var qs__default = /*#__PURE__*/_interopDefaultLegacy(qs); var ora__default = /*#__PURE__*/_interopDefaultLegacy(ora); @@ -568,30 +571,73 @@ function onList(opt) { console.log(msgs.join('\n')); } } +function checkAsk(templateDir, vars) { + return tslib.__awaiter(this, void 0, void 0, function () { + var result, askPath, data, answers; + return tslib.__generator(this, function (_a) { + switch (_a.label) { + case 0: + result = {}; + askPath = path__default["default"].resolve(templateDir, "./pp.ask.js"); + if (!fs__default["default"].pathExistsSync(askPath)) return [3, 5]; + data = require(askPath)(inquirer__default["default"]); + answers = {}; + if (!data) { + throw 'pp.ask.js的输出不符合格式'; + } + if (!types.isPromise(data)) return [3, 2]; + return [4, data]; + case 1: + answers = _a.sent(); + return [3, 4]; + case 2: return [4, inquirer__default["default"].prompt(data)]; + case 3: + answers = _a.sent(); + _a.label = 4; + case 4: + result = Object.assign(result, vars, answers); + _a.label = 5; + case 5: return [2, result]; + } + }); + }); +} function onCopy(templateDir, opts) { - if (!isExist(templateDir)) { - console.log(chalk__default["default"].red("请提供模板目录")); - return; - } - if (isExist(opts.targetDir)) { - console.log(chalk__default["default"].red("安全起见,不覆写已存在的目录,请先删除相同目录文件夹")); - return; - } - var vars = {}; - if (opts.p) { - try { - opts.p.split(',').forEach(function (v) { - var temp = v.split(":"); - if (temp[0] != undefined && temp[1] != undefined) { - vars[temp[0]] = temp[1]; - } - }); - } - catch (e) { - console.log(chalk__default["default"].red("您存储的变量解析出错了,请先检查")); - } - } - writefile(templateDir, opts.targetDir, vars); + return tslib.__awaiter(this, void 0, void 0, function () { + var vars; + return tslib.__generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!isExist(templateDir)) { + console.log(chalk__default["default"].red("请提供模板目录")); + return [2]; + } + if (isExist(opts.targetDir)) { + console.log(chalk__default["default"].red("安全起见,不覆写已存在的目录,请先删除相同目录文件夹")); + return [2]; + } + vars = {}; + if (opts.p) { + try { + opts.p.split(',').forEach(function (v) { + var temp = v.split(":"); + if (temp[0] != undefined && temp[1] != undefined) { + vars[temp[0]] = temp[1]; + } + }); + } + catch (e) { + console.log(chalk__default["default"].red("您存储的变量解析出错了,请先检查")); + } + } + return [4, checkAsk(templateDir, vars)]; + case 1: + vars = _a.sent(); + writefile(templateDir, opts.targetDir, vars); + return [2]; + } + }); + }); } function onClone(name, target, cc) { var item = Data.getInstance().findOne(name); @@ -622,14 +668,25 @@ function onClone(name, target, cc) { } var branch = item.branch; download__default["default"](branch ? git_url + '#' + branch : git_url, tempPath, { clone: true }, function (err) { - if (err) - throw err; - console.log("临时文件夹为:" + tempPath); - writefile(tempPath, to, opts, false, !cc.ignore); - fs__default["default"].removeSync(tempPath); - console.log(chalk__default["default"].green("已清除临时文件夹")); - console.log(chalk__default["default"].green("克隆成功")); - console.log("\ncd ".concat(to, " && npm install\n")); + return tslib.__awaiter(this, void 0, void 0, function () { + return tslib.__generator(this, function (_a) { + switch (_a.label) { + case 0: + if (err) + throw err; + console.log("临时文件夹为:" + tempPath); + return [4, checkAsk(tempPath, opts)]; + case 1: + opts = _a.sent(); + writefile(tempPath, to, opts, false, !cc.ignore); + fs__default["default"].removeSync(tempPath); + console.log(chalk__default["default"].green("已清除临时文件夹")); + console.log(chalk__default["default"].green("克隆成功")); + console.log("\ncd ".concat(to, " && npm install\n")); + return [2]; + } + }); + }); }); } function onRemove(name) { diff --git a/dist/pp.cjs.js.map b/dist/pp.cjs.js.map index 8388fe4..0e57237 100644 --- a/dist/pp.cjs.js.map +++ b/dist/pp.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"pp.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"pp.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/package.json b/package.json index 44002d1..37f1e23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@noderun/pp", - "version": "0.0.17", + "version": "0.0.20", "description": "命令行管理模板项目", "main": "dist/pp.umd.js", "module": "dist/pp.esm.js", @@ -12,6 +12,9 @@ "cjs" ] }, + "files": [ + "dist" + ], "author": { "name": "noderun", "email": "1549469775@qq.com", @@ -47,14 +50,14 @@ "cross-env": "^7.0.3", "dts-bundle": "^0.7.3", "execa": "^4.0.3", - "inquirer": "^8.2.0", "lodash": "^4.17.20", "rollup": "^2.26.3", "rollup-plugin-sourcemaps": "^0.6.2", "rollup-plugin-typescript2": "^0.27.2", "typescript": "^4.4.4" - }, - "dependencies": { +}, +"dependencies": { + "inquirer": "^8.2.0", "chalk": "^4.1.2", "cli-table3": "^0.6.2", "commander": "^8.3.0", diff --git a/src/func.ts b/src/func.ts index 7d087ad..7b0ee94 100644 --- a/src/func.ts +++ b/src/func.ts @@ -8,6 +8,8 @@ import writefile, {isExist} from "@/writefile"; import fs from "fs-extra"; import ini from "ini"; import Table from "cli-table3" +import inquirer from 'inquirer'; +import { isPromise } from "util/types"; export * from "./gitee" @@ -84,7 +86,26 @@ export function onList(opt?: { all?: boolean, tag:string, table?: boolean }) { } } -export function onCopy(templateDir: string, opts: { targetDir: string, p:string }){ +async function checkAsk(templateDir: string, vars: object) { + let result = {} + const askPath = path.resolve(templateDir, "./pp.ask.js") + if(fs.pathExistsSync(askPath)){ + const data = require(askPath)(inquirer); + let answers = {} + if(!data){ + throw 'pp.ask.js的输出不符合格式' + } + if(isPromise(data)){ + answers = await data + }else{ + answers = await inquirer.prompt(data) + } + result = Object.assign(result, vars, answers) + } + return result +} + +export async function onCopy(templateDir: string, opts: { targetDir: string, p:string }){ if(!isExist(templateDir)){ console.log( chalk.red("请提供模板目录") @@ -113,6 +134,7 @@ export function onCopy(templateDir: string, opts: { targetDir: string, p:string ); } } + vars = await checkAsk(templateDir, vars) writefile(templateDir, opts.targetDir, vars); } @@ -148,10 +170,11 @@ export function onClone(name: string, target: string, cc: { ignore?:boolean }) { } } const branch = item.branch; - download(branch?git_url+'#'+branch:git_url, tempPath, { clone: true }, function (err: Error) { + download(branch?git_url+'#'+branch:git_url, tempPath, { clone: true }, async function (err: Error) { if (err) throw err; console.log("临时文件夹为:" + tempPath); - //TODO 考虑增加命令行交互功能 + //TODO 测试加命令行交互功能 + opts = await checkAsk(tempPath, opts) writefile(tempPath, to, opts, false, !cc.ignore); fs.removeSync(tempPath); console.log(chalk.green("已清除临时文件夹")); diff --git a/templates/a.txt b/templates/a.txt index 20b8889..c0934dd 100644 --- a/templates/a.txt +++ b/templates/a.txt @@ -1,2 +1,3 @@ asdad - <%= name %> + <%= locals.name || '' %> + <%= locals.toppings || '' %> diff --git a/templates/pp.ask copy.js b/templates/pp.ask copy.js new file mode 100644 index 0000000..923efc9 --- /dev/null +++ b/templates/pp.ask copy.js @@ -0,0 +1,65 @@ +const inquirer = require("inquirer"); + +module.exports = inquirer + .prompt([ + { + type: "checkbox", + message: "Select toppings", + name: "toppings", + choices: [ + new inquirer.Separator(" = The Meats = "), + { + name: "Pepperoni", + }, + { + name: "Ham", + }, + { + name: "Ground Meat", + }, + { + name: "Bacon", + }, + new inquirer.Separator(" = The Cheeses = "), + { + name: "Mozzarella", + checked: true, + }, + { + name: "Cheddar", + }, + { + name: "Parmesan", + }, + new inquirer.Separator(" = The usual ="), + { + name: "Mushroom", + }, + { + name: "Tomato", + }, + new inquirer.Separator(" = The extras = "), + { + name: "Pineapple", + }, + { + name: "Olives", + disabled: "out of stock", + }, + { + name: "Extra cheese", + }, + ], + validate(answer) { + if (answer.length < 1) { + return "You must choose at least one topping."; + } + + return true; + }, + }, + ]) + .then((answers) => { + console.log(JSON.stringify(answers, null, " ")); + return answers; + }); diff --git a/templates/pp.ask.js b/templates/pp.ask.js new file mode 100644 index 0000000..2b1f37d --- /dev/null +++ b/templates/pp.ask.js @@ -0,0 +1,62 @@ +console.log(module.paths); + +module.exports = (inquirer) => { + [ + { + type: "checkbox", + message: "Select toppings", + name: "toppings", + choices: [ + new inquirer.Separator(" = The Meats = "), + { + name: "Pepperoni", + }, + { + name: "Ham", + }, + { + name: "Ground Meat", + }, + { + name: "Bacon", + }, + new inquirer.Separator(" = The Cheeses = "), + { + name: "Mozzarella", + checked: true, + }, + { + name: "Cheddar", + }, + { + name: "Parmesan", + }, + new inquirer.Separator(" = The usual ="), + { + name: "Mushroom", + }, + { + name: "Tomato", + }, + new inquirer.Separator(" = The extras = "), + { + name: "Pineapple", + }, + { + name: "Olives", + disabled: "out of stock", + }, + { + name: "Extra cheese", + }, + ], + validate(answer) { + if (answer.length < 1) { + return "You must choose at least one topping."; + } + + return true; + }, + }, + ]; +}; diff --git a/templates/啊倒萨/aas.txt b/templates/啊倒萨/aas.txt index 20b8889..2b3bfc6 100644 --- a/templates/啊倒萨/aas.txt +++ b/templates/啊倒萨/aas.txt @@ -1,2 +1,2 @@ asdad - <%= name %> + <%= locals.name || '' %>