Browse Source

增加inquirer交互

master
1549469775 3 years ago
parent
commit
ae4333fc21
  1. 1
      README.MD
  2. 119
      dist/pp.cjs.js
  3. 2
      dist/pp.cjs.js.map
  4. 11
      package.json
  5. 29
      src/func.ts
  6. 3
      templates/a.txt
  7. 65
      templates/pp.ask copy.js
  8. 62
      templates/pp.ask.js
  9. 2
      templates/啊倒萨/aas.txt

1
README.MD

@ -41,6 +41,7 @@ Commands:
* [x] 代码整理
* [x] 同步功能
* [x] 可展示表格`pp list --table`
* [x] 增加`inquirer`自定义项目变量(beta)
TODO

119
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) {

2
dist/pp.cjs.js.map

@ -1 +1 @@
{"version":3,"file":"pp.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
{"version":3,"file":"pp.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}

11
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",

29
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("已清除临时文件夹"));

3
templates/a.txt

@ -1,2 +1,3 @@
asdad
<%= name %>
<%= locals.name || '' %>
<%= locals.toppings || '' %>

65
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;
});

62
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;
},
},
];
};

2
templates/啊倒萨/aas.txt

@ -1,2 +1,2 @@
asdad
<%= name %>
<%= locals.name || '' %>

Loading…
Cancel
Save