hyfcli 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.
Potentially problematic release.
This version of hyfcli might be problematic. Click here for more details.
- package/README.md +30 -0
- package/bin/index.js +457 -0
- package/bin/index.js.map +1 -0
- package/bin/index.mjs +463 -0
- package/bin/index.mjs.map +1 -0
- package/package.json +39 -0
package/README.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
## 使用说明
|
|
2
|
+
|
|
3
|
+
### 安装
|
|
4
|
+
|
|
5
|
+
```shell
|
|
6
|
+
npm install hyfcli -g
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
### 命令
|
|
10
|
+
|
|
11
|
+
```shell
|
|
12
|
+
hyfcli create [project-name] [template-name] # 创建项目初始化项目 如:hyfcli create my-project vue|react
|
|
13
|
+
hyfcli addcpn <component-name> [templateType] # 添加组件 如:hyfcli addcpn my-component react|vue 默认是vue
|
|
14
|
+
|
|
15
|
+
hyfcli add-axios # 添加axios封装库,默认放到src/request中 如:hyfcli add-axios -d src/request
|
|
16
|
+
|
|
17
|
+
hyfcli addrouter # 添加动态路由,默认放到src/router中 如:hyfcli addrouter -d src/router
|
|
18
|
+
|
|
19
|
+
hyfcli addstore # 添加store配置,默认放到src/store中 如:hyfcli addstore -d src/store
|
|
20
|
+
|
|
21
|
+
hyfcli addpage # 添加page,并且生成router,store,
|
|
22
|
+
|
|
23
|
+
hyfcli --help # 查看帮助信息
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 参数说明
|
|
27
|
+
|
|
28
|
+
```shell
|
|
29
|
+
--d --dest 指定目录
|
|
30
|
+
```
|
package/bin/index.js
ADDED
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
+
var __commonJS = (cb, mod) => function __require() {
|
|
4
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
// package.json
|
|
8
|
+
var require_package = __commonJS({
|
|
9
|
+
"package.json"(exports2, module2) {
|
|
10
|
+
module2.exports = {
|
|
11
|
+
name: "hyfcli",
|
|
12
|
+
version: "1.0.0",
|
|
13
|
+
description: "",
|
|
14
|
+
main: "index.js",
|
|
15
|
+
bin: {
|
|
16
|
+
hyfcli: "./bin/index.js"
|
|
17
|
+
},
|
|
18
|
+
scripts: {
|
|
19
|
+
build: "tsup",
|
|
20
|
+
test: 'echo "Error: no test specified" && exit 1'
|
|
21
|
+
},
|
|
22
|
+
keywords: [
|
|
23
|
+
"vue",
|
|
24
|
+
"react",
|
|
25
|
+
"cli",
|
|
26
|
+
"template"
|
|
27
|
+
],
|
|
28
|
+
author: "hyf",
|
|
29
|
+
license: "ISC",
|
|
30
|
+
packageManager: "pnpm@10.20.0",
|
|
31
|
+
dependencies: {
|
|
32
|
+
"@inquirer/prompts": "^8.5.2",
|
|
33
|
+
axios: "^1.18.0",
|
|
34
|
+
chalk: "4.1.2",
|
|
35
|
+
commander: "^15.0.0",
|
|
36
|
+
"download-git-repo": "^3.0.2",
|
|
37
|
+
ejs: "^6.0.1",
|
|
38
|
+
figlet: "^1.11.0",
|
|
39
|
+
ora: "^4.1.1"
|
|
40
|
+
},
|
|
41
|
+
devDependencies: {
|
|
42
|
+
tsup: "^8.5.1",
|
|
43
|
+
typescript: "^6.0.3"
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// lib/core/help-options.js
|
|
50
|
+
var require_help_options = __commonJS({
|
|
51
|
+
"lib/core/help-options.js"(exports2, module2) {
|
|
52
|
+
var { program: program2 } = require("commander");
|
|
53
|
+
var { version: version2 } = require_package();
|
|
54
|
+
function helpOptions2() {
|
|
55
|
+
program2.option("-d, --dest <dest>", "\u6307\u5B9A\u76EE\u6807\u6587\u4EF6\u5939");
|
|
56
|
+
program2.option("-t, --type <type>", "\u6307\u5B9A\u7EC4\u4EF6\u7C7B\u578B");
|
|
57
|
+
}
|
|
58
|
+
module2.exports = helpOptions2;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// lib/utils/text-position.js
|
|
63
|
+
var require_text_position = __commonJS({
|
|
64
|
+
"lib/utils/text-position.js"(exports2, module2) {
|
|
65
|
+
function centerLine(text, width = process.stdout.columns || 80) {
|
|
66
|
+
const pad = Math.max(0, Math.floor((width - text.length) / 2));
|
|
67
|
+
return " ".repeat(pad) + text;
|
|
68
|
+
}
|
|
69
|
+
function centerFiglet(figletText, width = process.stdout.columns || 80) {
|
|
70
|
+
const lines = figletText.split("\n");
|
|
71
|
+
return lines.map((line) => {
|
|
72
|
+
const trimmed = line.trimEnd();
|
|
73
|
+
const pad = Math.max(0, Math.floor((width - trimmed.length) / 2));
|
|
74
|
+
return " ".repeat(pad) + trimmed;
|
|
75
|
+
}).join("\n");
|
|
76
|
+
}
|
|
77
|
+
function positionFiglet(figletText, pad = 10) {
|
|
78
|
+
const lines = figletText.split("\n");
|
|
79
|
+
return lines.map((line) => {
|
|
80
|
+
const trimmed = line.trimEnd();
|
|
81
|
+
return " ".repeat(pad) + trimmed;
|
|
82
|
+
}).join("\n");
|
|
83
|
+
}
|
|
84
|
+
module2.exports = {
|
|
85
|
+
centerLine,
|
|
86
|
+
centerFiglet,
|
|
87
|
+
positionFiglet
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// lib/core/print-welcome.js
|
|
93
|
+
var require_print_welcome = __commonJS({
|
|
94
|
+
"lib/core/print-welcome.js"(exports2, module2) {
|
|
95
|
+
var chalk = require("chalk");
|
|
96
|
+
var figlet = require("figlet");
|
|
97
|
+
var { centerFiglet, positionFiglet } = require_text_position();
|
|
98
|
+
function generateBannerSync(text, font = "Standard") {
|
|
99
|
+
try {
|
|
100
|
+
return figlet.textSync(text, { font });
|
|
101
|
+
} catch (err) {
|
|
102
|
+
throw err;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function printWelcome2() {
|
|
106
|
+
const { version: version2, name } = require_package();
|
|
107
|
+
console.log(version2, name);
|
|
108
|
+
const banner = generateBannerSync(name);
|
|
109
|
+
console.log(chalk.green(positionFiglet(banner)));
|
|
110
|
+
}
|
|
111
|
+
module2.exports = printWelcome2;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
// lib/utils/checkDirExist.js
|
|
116
|
+
var require_checkDirExist = __commonJS({
|
|
117
|
+
"lib/utils/checkDirExist.js"(exports2, module2) {
|
|
118
|
+
var fs = require("fs");
|
|
119
|
+
module2.exports = function checkDirExist(dirName) {
|
|
120
|
+
return new Promise((resolve, reject) => {
|
|
121
|
+
fs.access(dirName, fs.constants.F_OK, (err) => {
|
|
122
|
+
if (err) {
|
|
123
|
+
resolve(false);
|
|
124
|
+
} else {
|
|
125
|
+
resolve(true);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
// lib/utils/exec-command.js
|
|
134
|
+
var require_exec_command = __commonJS({
|
|
135
|
+
"lib/utils/exec-command.js"(exports2, module2) {
|
|
136
|
+
var { spawn } = require("child_process");
|
|
137
|
+
var checkDirExist = require_checkDirExist();
|
|
138
|
+
module2.exports = async function execCommand(...args) {
|
|
139
|
+
return new Promise((resolve, reject) => {
|
|
140
|
+
const childProcess = spawn(...args);
|
|
141
|
+
childProcess.stdout.pipe(process.stdout);
|
|
142
|
+
childProcess.stderr.pipe(process.stderr);
|
|
143
|
+
childProcess.on("close", (code) => {
|
|
144
|
+
console.log("code::", code);
|
|
145
|
+
resolve();
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
// lib/config/repo.js
|
|
153
|
+
var require_repo = __commonJS({
|
|
154
|
+
"lib/config/repo.js"(exports2, module2) {
|
|
155
|
+
var REACT_REPO = "direct:https://gitee.com/hyf120/react18--vite5---ts.git#master";
|
|
156
|
+
var VUE_REPO = "direct:https://gitee.com/hyf120/common_vue_template.git#master";
|
|
157
|
+
module2.exports = {
|
|
158
|
+
REACT_REPO,
|
|
159
|
+
VUE_REPO
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
// lib/utils/print-log.js
|
|
165
|
+
var require_print_log = __commonJS({
|
|
166
|
+
"lib/utils/print-log.js"(exports2, module2) {
|
|
167
|
+
var chalk = require("chalk");
|
|
168
|
+
function printLogForInstall(projectName) {
|
|
169
|
+
console.log(chalk.yellow(`--`.repeat(30)));
|
|
170
|
+
console.log("");
|
|
171
|
+
console.log(chalk.green(` cd ${projectName}`));
|
|
172
|
+
console.log(chalk.green(` pnpm install`));
|
|
173
|
+
console.log(chalk.green(` pnpm run dev`));
|
|
174
|
+
console.log("");
|
|
175
|
+
console.log(chalk.yellow(`--`.repeat(30)));
|
|
176
|
+
process.exit(0);
|
|
177
|
+
}
|
|
178
|
+
module2.exports = {
|
|
179
|
+
printLogForInstall
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
// lib/core/create-project.js
|
|
185
|
+
var require_create_project = __commonJS({
|
|
186
|
+
"lib/core/create-project.js"(exports2, module2) {
|
|
187
|
+
var { promisify } = require("util");
|
|
188
|
+
var fs = require("fs/promises");
|
|
189
|
+
var download = promisify(require("download-git-repo"));
|
|
190
|
+
var ora = require("ora");
|
|
191
|
+
var chalk = require("chalk");
|
|
192
|
+
var { select, input, confirm } = require("@inquirer/prompts");
|
|
193
|
+
var execCommand = require_exec_command();
|
|
194
|
+
var { REACT_REPO, VUE_REPO } = require_repo();
|
|
195
|
+
var checkDirExist = require_checkDirExist();
|
|
196
|
+
var { printLogForInstall } = require_print_log();
|
|
197
|
+
async function getInitInfo(projectName, template) {
|
|
198
|
+
if (!projectName) {
|
|
199
|
+
projectName = await input({
|
|
200
|
+
message: "\u8BF7\u8F93\u5165\u9879\u76EE\u540D\u79F0",
|
|
201
|
+
required: true,
|
|
202
|
+
name: "projectName",
|
|
203
|
+
validate: (value) => {
|
|
204
|
+
if (!value) {
|
|
205
|
+
return "\u9879\u76EE\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A";
|
|
206
|
+
}
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
if (template !== "react" && template !== "vue") {
|
|
212
|
+
template = await select({
|
|
213
|
+
message: "\u8BF7\u9009\u62E9\u6A21\u677F",
|
|
214
|
+
required: true,
|
|
215
|
+
name: "template",
|
|
216
|
+
choices: [
|
|
217
|
+
{ name: " react", value: REACT_REPO, description: " react\u6A21\u677F" },
|
|
218
|
+
{ name: " vue", value: VUE_REPO, description: " vue\u6A21\u677F" }
|
|
219
|
+
]
|
|
220
|
+
});
|
|
221
|
+
} else {
|
|
222
|
+
template = { template_repo: template === "react" ? REACT_REPO : VUE_REPO };
|
|
223
|
+
}
|
|
224
|
+
return { projectName, template_repo: template };
|
|
225
|
+
}
|
|
226
|
+
async function coverDir(dirPath) {
|
|
227
|
+
const isDirExist = await checkDirExist(dirPath);
|
|
228
|
+
if (isDirExist) {
|
|
229
|
+
const answer = await confirm({ message: "\u6587\u4EF6\u5939\u5DF2\u5B58\u5728\uFF0C\u662F\u5426\u8986\u76D6?" });
|
|
230
|
+
if (answer) {
|
|
231
|
+
await deleteDir(dirPath);
|
|
232
|
+
} else {
|
|
233
|
+
process.exit(0);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
async function deleteDir(dirPath) {
|
|
238
|
+
try {
|
|
239
|
+
const spinner2 = ora(`\u8BF7\u7A0D\u7B49...`).start();
|
|
240
|
+
await fs.rm(dirPath, { recursive: true, force: true });
|
|
241
|
+
spinner2.succeed("\u8986\u76D6\u6587\u4EF6\u5939\u6210\u529F");
|
|
242
|
+
} catch (error) {
|
|
243
|
+
spinner.succeed("\u5220\u9664\u6587\u4EF6\u5939\u5931\u8D25\uFF0C\u8BF7\u624B\u52A8\u5220\u9664");
|
|
244
|
+
process.exit(0);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
async function downloadTemplate(projectName, template_repo) {
|
|
248
|
+
await coverDir(projectName);
|
|
249
|
+
const spinner2 = ora(`\u6B63\u5728\u4E0B\u8F7D\u6A21\u677F...`).start();
|
|
250
|
+
try {
|
|
251
|
+
await download(template_repo, projectName, { clone: true });
|
|
252
|
+
spinner2.succeed("\u6A21\u677F\u4E0B\u8F7D\u5B8C\u6210");
|
|
253
|
+
} catch (err) {
|
|
254
|
+
spinner2.fail(chalk.red(`\u6A21\u677F\u4E0B\u8F7D\u5931\u8D25: ${err.message}`));
|
|
255
|
+
console.log("");
|
|
256
|
+
process.exit(1);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
async function createProjectAction2(projectName, template) {
|
|
260
|
+
const initInfo = await getInitInfo(projectName, template);
|
|
261
|
+
await downloadTemplate(initInfo.projectName, initInfo.template_repo);
|
|
262
|
+
await installDependencies(initInfo.projectName);
|
|
263
|
+
}
|
|
264
|
+
async function installDependencies(projectName) {
|
|
265
|
+
const answer = await confirm({ message: "\u662F\u5426\u9700\u8981\u5B89\u88C5\u4F9D\u8D56?" });
|
|
266
|
+
if (!answer) {
|
|
267
|
+
printLogForInstall(projectName);
|
|
268
|
+
}
|
|
269
|
+
const commandName = process.platform === "win32" ? "pnpm.cmd" : "pnpm";
|
|
270
|
+
const options = {
|
|
271
|
+
cwd: `./${projectName}`,
|
|
272
|
+
shell: true
|
|
273
|
+
};
|
|
274
|
+
await execCommand(commandName, ["install"], options);
|
|
275
|
+
await execCommand(commandName, ["run", "dev"], options);
|
|
276
|
+
}
|
|
277
|
+
module2.exports = createProjectAction2;
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
// lib/utils/ejs-render.js
|
|
282
|
+
var require_ejs_render = __commonJS({
|
|
283
|
+
"lib/utils/ejs-render.js"(exports2, module2) {
|
|
284
|
+
var ejs = require("ejs");
|
|
285
|
+
var path = require("path");
|
|
286
|
+
function renderEjs(template, data) {
|
|
287
|
+
return new Promise((resolve, reject) => {
|
|
288
|
+
const templatePath = `../template/${template}`;
|
|
289
|
+
console.log(template);
|
|
290
|
+
const absolutePath = path.resolve(__dirname, templatePath);
|
|
291
|
+
ejs.renderFile(absolutePath, data, (err, str) => {
|
|
292
|
+
if (err) {
|
|
293
|
+
reject(err);
|
|
294
|
+
} else {
|
|
295
|
+
resolve(str);
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
module2.exports = {
|
|
301
|
+
renderEjs
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
// lib/utils/writeFile.js
|
|
307
|
+
var require_writeFile = __commonJS({
|
|
308
|
+
"lib/utils/writeFile.js"(exports2, module2) {
|
|
309
|
+
var fs = require("fs/promises");
|
|
310
|
+
async function writeFile(filePath, data) {
|
|
311
|
+
try {
|
|
312
|
+
await fs.writeFile(filePath, data, {
|
|
313
|
+
encoding: "utf-8"
|
|
314
|
+
});
|
|
315
|
+
} catch (error) {
|
|
316
|
+
console.log("\u521B\u5EFA\u6587\u4EF6\u5931\u8D25\uFF1A", error);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
module2.exports = {
|
|
320
|
+
writeFile
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
// lib/core/actions.js
|
|
326
|
+
var require_actions = __commonJS({
|
|
327
|
+
"lib/core/actions.js"(exports2, module2) {
|
|
328
|
+
var fs = require("fs/promises");
|
|
329
|
+
var { program: program2 } = require("commander");
|
|
330
|
+
var ora = require("ora");
|
|
331
|
+
var { select } = require("@inquirer/prompts");
|
|
332
|
+
var chalk = require("chalk");
|
|
333
|
+
var path = require("path");
|
|
334
|
+
var createProjectAction2 = require_create_project();
|
|
335
|
+
var checkDirExist = require_checkDirExist();
|
|
336
|
+
var execCommand = require_exec_command();
|
|
337
|
+
var { renderEjs } = require_ejs_render();
|
|
338
|
+
var { writeFile } = require_writeFile();
|
|
339
|
+
async function addComponentAction2(cnpName) {
|
|
340
|
+
const type = program2.opts().type;
|
|
341
|
+
const componentName = type === "react" ? "component.tsx.ejs" : "component.vue.ejs";
|
|
342
|
+
const templateRes = await renderEjs(componentName, {
|
|
343
|
+
name: cnpName.toLowerCase()
|
|
344
|
+
});
|
|
345
|
+
const destPath = program2.opts().dest || `./src/views`;
|
|
346
|
+
await createDir2(destPath);
|
|
347
|
+
await writeFile(`${destPath}/${cnpName}.vue`, templateRes);
|
|
348
|
+
}
|
|
349
|
+
async function createDir2(dirPath) {
|
|
350
|
+
if (!dirPath) return;
|
|
351
|
+
const isDirExist = await checkDirExist(dirPath);
|
|
352
|
+
if (isDirExist) return;
|
|
353
|
+
try {
|
|
354
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
355
|
+
} catch (error) {
|
|
356
|
+
console.log(chalk.error("\u521B\u5EFA\u6587\u4EF6\u5939\u5931\u8D25"));
|
|
357
|
+
process.exit(1);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
async function copyFileAction(sourceDir, destPath) {
|
|
361
|
+
try {
|
|
362
|
+
await fs.cp(sourceDir, destPath, { recursive: true });
|
|
363
|
+
} catch (error) {
|
|
364
|
+
console.log(chalk.error("\u590D\u5236\u6587\u4EF6\u5931\u8D25"));
|
|
365
|
+
process.exit(1);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
async function addAxiosAction2() {
|
|
369
|
+
const dest = program2.opts().dest ?? "./src/request";
|
|
370
|
+
await copyFileAction(path.join(__dirname, "../modules/request"), dest);
|
|
371
|
+
console.log(chalk.green("\u6587\u4EF6\u62F7\u8D1D\u6210\u529F"));
|
|
372
|
+
console.log(chalk.yellow("\u8BF7\u624B\u52A8\u5B89\u88C5axios\u4F9D\u8D56"));
|
|
373
|
+
process.exit(0);
|
|
374
|
+
}
|
|
375
|
+
async function addRouterAction2() {
|
|
376
|
+
const dest = program2.opts().dest ?? "./src/router";
|
|
377
|
+
await copyFileAction(path.join(__dirname, "../modules/router"), dest);
|
|
378
|
+
console.log(chalk.green("\u6587\u4EF6\u62F7\u8D1D\u6210\u529F"));
|
|
379
|
+
console.log(chalk.yellow("\u8BF7\u624B\u52A8\u5B89\u88C5vue-router\u4F9D\u8D56"));
|
|
380
|
+
process.exit(0);
|
|
381
|
+
}
|
|
382
|
+
async function addStoreAction2() {
|
|
383
|
+
const dest = program2.opts().dest ?? "./src/store";
|
|
384
|
+
await copyFileAction(path.join(__dirname, "../modules/store"), dest);
|
|
385
|
+
console.log(chalk.green("\u6587\u4EF6\u62F7\u8D1D\u6210\u529F"));
|
|
386
|
+
console.log(chalk.yellow("\u8BF7\u624B\u52A8\u5B89\u88C5pinia,pinia-plugin-persistedstate\u4F9D\u8D56"));
|
|
387
|
+
process.exit(0);
|
|
388
|
+
}
|
|
389
|
+
async function addPageAction2(cnpName) {
|
|
390
|
+
if (!cnpName) {
|
|
391
|
+
console.log(chalk.red("\u8BF7\u8F93\u5165\u7EC4\u4EF6\u540D\u79F0"));
|
|
392
|
+
process.exit(0);
|
|
393
|
+
}
|
|
394
|
+
const destPath = `./src/views/${cnpName.toLowerCase()}`;
|
|
395
|
+
const templateRes = await renderEjs("component.vue.ejs", {
|
|
396
|
+
name: cnpName.toLowerCase()
|
|
397
|
+
});
|
|
398
|
+
await createDir2(destPath);
|
|
399
|
+
await createDir2(destPath + "/c-cnps");
|
|
400
|
+
await writeFile(`${destPath}/${cnpName}.vue`, templateRes);
|
|
401
|
+
const routerModulesPath = `./src/router/modules`;
|
|
402
|
+
const routerRes = await renderEjs("router.ejs", {
|
|
403
|
+
name: cnpName
|
|
404
|
+
});
|
|
405
|
+
await createDir2(routerModulesPath);
|
|
406
|
+
await writeFile(
|
|
407
|
+
`${routerModulesPath}/${cnpName.toLowerCase()}.ts`,
|
|
408
|
+
routerRes
|
|
409
|
+
);
|
|
410
|
+
const storePath = `./src/store/${cnpName.toLowerCase()}`;
|
|
411
|
+
const storeRes = await renderEjs("store.ejs", {
|
|
412
|
+
name: cnpName
|
|
413
|
+
});
|
|
414
|
+
await createDir2(storePath);
|
|
415
|
+
await writeFile(`${storePath}/index.ts`, storeRes);
|
|
416
|
+
await writeFile(`${storePath}/types.ts`, "// TODO: types");
|
|
417
|
+
}
|
|
418
|
+
module2.exports = {
|
|
419
|
+
createProjectAction: createProjectAction2,
|
|
420
|
+
addComponentAction: addComponentAction2,
|
|
421
|
+
createDir: createDir2,
|
|
422
|
+
addAxiosAction: addAxiosAction2,
|
|
423
|
+
addRouterAction: addRouterAction2,
|
|
424
|
+
addStoreAction: addStoreAction2,
|
|
425
|
+
addPageAction: addPageAction2
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
});
|
|
429
|
+
|
|
430
|
+
// lib/index.js
|
|
431
|
+
var { program } = require("commander");
|
|
432
|
+
var helpOptions = require_help_options();
|
|
433
|
+
var { version } = require_package();
|
|
434
|
+
var printWelcome = require_print_welcome();
|
|
435
|
+
var {
|
|
436
|
+
createProjectAction,
|
|
437
|
+
addComponentAction,
|
|
438
|
+
createDir,
|
|
439
|
+
addAxiosAction,
|
|
440
|
+
addRouterAction,
|
|
441
|
+
addStoreAction,
|
|
442
|
+
addPageAction
|
|
443
|
+
} = require_actions();
|
|
444
|
+
helpOptions();
|
|
445
|
+
printWelcome();
|
|
446
|
+
program.name("hyfcli").description("\u4E00\u4E2A\u81EA\u5B9A\u4E49\u7684\u811A\u624B\u67B6\u5DE5\u5177").version(version);
|
|
447
|
+
program.command("create [projectName] [template]").description("\u521B\u5EFA\u65B0\u9879\u76EE,\u4F8B\u5982\uFF1Ahyfcli create my-project vue").action(createProjectAction);
|
|
448
|
+
program.command("addcpn <name>").description(
|
|
449
|
+
"\u6DFB\u52A0\u4E00\u4E2A\u7EC4\u4EF6\uFF0C\u4F8B\u5982\uFF1Ahyfcli addcpn Home -t vue|react \u9ED8\u8BA4\u662Fvue\u6A21\u7248\uFF0C\u9ED8\u8BA4\u4F4D\u7F6E/src/views"
|
|
450
|
+
).action(addComponentAction);
|
|
451
|
+
program.command("createDir <dirPath> ").description("\u521B\u5EFA\u4E00\u4E2A\u6587\u4EF6\u5939\uFF0C\u4F8B\u5982\uFF1Ahyfcli createDir src/components").action(createDir);
|
|
452
|
+
program.command("add-axios").description("\u6DFB\u52A0\u57FA\u4E8Eaxios\u7684\u8BF7\u6C42\u5E93").action(addAxiosAction);
|
|
453
|
+
program.command("addrouter").description("\u6DFB\u52A0\u52A8\u6001\u52A0\u8F7D\u7684\u8DEF\u7531\u914D\u7F6E").action(addRouterAction);
|
|
454
|
+
program.command("addstore").description("\u6DFB\u52A0pinia\u72B6\u6001\u7BA1\u7406,\u4EE5\u53CA\u6301\u4E45\u5316\u914D\u7F6E").action(addStoreAction);
|
|
455
|
+
program.command("addpage <pageName>").description("\u6DFB\u52A0page,\u751F\u6210\u8DEF\u7531\u3001\u7EC4\u4EF6\u3001\u9875\u9762").action(addPageAction);
|
|
456
|
+
program.parse(process.argv);
|
|
457
|
+
//# sourceMappingURL=index.js.map
|
package/bin/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../package.json","../lib/core/help-options.js","../lib/utils/text-position.js","../lib/core/print-welcome.js","../lib/utils/checkDirExist.js","../lib/utils/exec-command.js","../lib/config/repo.js","../lib/utils/print-log.js","../lib/core/create-project.js","../lib/utils/ejs-render.js","../lib/utils/writeFile.js","../lib/core/actions.js","../lib/index.js"],"sourcesContent":["{\n \"name\": \"hyfcli\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"bin\": {\n \"hyfcli\": \"./bin/index.js\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [\n \"vue\",\n \"react\",\n \"cli\",\n \"template\"\n ],\n \"author\": \"hyf\",\n \"license\": \"ISC\",\n \"packageManager\": \"pnpm@10.20.0\",\n \"dependencies\": {\n \"@inquirer/prompts\": \"^8.5.2\",\n \"axios\": \"^1.18.0\",\n \"chalk\": \"4.1.2\",\n \"commander\": \"^15.0.0\",\n \"download-git-repo\": \"^3.0.2\",\n \"ejs\": \"^6.0.1\",\n \"figlet\": \"^1.11.0\",\n \"ora\": \"^4.1.1\"\n },\n \"devDependencies\": {\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^6.0.3\"\n }\n}\n","const { program } = require(\"commander\");\r\nconst { version } = require(\"../../package.json\");\r\nfunction helpOptions() {\r\n program.option(\"-d, --dest <dest>\", \"指定目标文件夹\");\r\n program.option(\"-t, --type <type>\", \"指定组件类型\");\r\n}\r\n\r\nmodule.exports = helpOptions;\r\n","/**\r\n * 文本居中\r\n * @type {string} text\r\n * @param {number} width\r\n * @return {string}\r\n */\r\nfunction centerLine(text, width = process.stdout.columns || 80) {\r\n const pad = Math.max(0, Math.floor((width - text.length) / 2));\r\n\r\n return \" \".repeat(pad) + text;\r\n}\r\n\r\n/**\r\n * Figlet 文本居中\r\n * @type {string} figletText\r\n * @param {number} width\r\n * @return {string}\r\n */\r\nfunction centerFiglet(figletText, width = process.stdout.columns || 80) {\r\n const lines = figletText.split(\"\\n\");\r\n return lines\r\n .map((line) => {\r\n const trimmed = line.trimEnd(); // 保留左侧空白,去除右侧多余空格\r\n const pad = Math.max(0, Math.floor((width - trimmed.length) / 2));\r\n return \" \".repeat(pad) + trimmed;\r\n })\r\n .join(\"\\n\");\r\n}\r\n\r\n/**\r\n * 自定义文本位置\r\n * @param {string} figletText Figlet 文本\r\n * @param {number} pad 左侧空白\r\n * @returns {string}\r\n *\r\n */\r\nfunction positionFiglet(figletText, pad = 10) {\r\n const lines = figletText.split(\"\\n\");\r\n return lines\r\n .map((line) => {\r\n const trimmed = line.trimEnd(); // 保留左侧空白,去除右侧多余空格\r\n return \" \".repeat(pad) + trimmed;\r\n })\r\n .join(\"\\n\");\r\n}\r\nmodule.exports = {\r\n centerLine,\r\n centerFiglet,\r\n positionFiglet,\r\n};\r\n","const chalk = require(\"chalk\");\r\nconst figlet = require(\"figlet\");\r\nconst { centerFiglet, positionFiglet } = require(\"../utils/text-position\");\r\nfunction generateBannerSync(text, font = \"Standard\") {\r\n try {\r\n return figlet.textSync(text, { font });\r\n } catch (err) {\r\n throw err;\r\n }\r\n}\r\n\r\nfunction printWelcome() {\r\n const { version, name } = require(\"../../package.json\");\r\n console.log(version, name);\r\n const banner = generateBannerSync(name);\r\n console.log(chalk.green(positionFiglet(banner)));\r\n}\r\n\r\nmodule.exports = printWelcome;\r\n","const fs = require(\"fs\");\r\n\r\nmodule.exports = function checkDirExist(dirName) {\r\n return new Promise((resolve, reject) => {\r\n fs.access(dirName, fs.constants.F_OK, (err) => {\r\n if (err) {\r\n resolve(false);\r\n } else {\r\n resolve(true);\r\n }\r\n });\r\n });\r\n};\r\n","const { spawn } = require(\"child_process\");\r\nconst checkDirExist = require(\"./checkDirExist\");\r\nmodule.exports = async function execCommand(...args) {\r\n return new Promise((resolve, reject) => {\r\n const childProcess = spawn(...args); // 启用 shell });\r\n childProcess.stdout.pipe(process.stdout);\r\n childProcess.stderr.pipe(process.stderr);\r\n childProcess.on(\"close\", (code) => {\r\n console.log(\"code::\", code);\r\n resolve();\r\n });\r\n });\r\n};\r\n","const REACT_REPO =\r\n \"direct:https://gitee.com/hyf120/react18--vite5---ts.git#master\";\r\nconst VUE_REPO =\r\n \"direct:https://gitee.com/hyf120/common_vue_template.git#master\";\r\nmodule.exports = {\r\n REACT_REPO,\r\n VUE_REPO,\r\n};\r\n","const chalk = require(\"chalk\");\r\nfunction printLogForInstall(projectName) {\r\n console.log(chalk.yellow(`--`.repeat(30)));\r\n console.log(\"\");\r\n console.log(chalk.green(` cd ${projectName}`));\r\n console.log(chalk.green(` pnpm install`));\r\n console.log(chalk.green(` pnpm run dev`));\r\n console.log(\"\");\r\n console.log(chalk.yellow(`--`.repeat(30)));\r\n process.exit(0);\r\n}\r\n\r\nmodule.exports = {\r\n printLogForInstall,\r\n};\r\n","const { promisify } = require(\"util\");\r\nconst fs = require(\"node:fs/promises\");\r\nconst download = promisify(require(\"download-git-repo\"));\r\nconst ora = require(\"ora\");\r\nconst chalk = require(\"chalk\");\r\nconst { select, input, confirm } = require(\"@inquirer/prompts\");\r\n\r\nconst execCommand = require(\"../utils/exec-command\");\r\nconst { REACT_REPO, VUE_REPO } = require(\"../config/repo\");\r\nconst checkDirExist = require(\"../utils/checkDirExist\");\r\nconst { printLogForInstall } = require(\"../utils/print-log\");\r\nasync function getInitInfo(projectName, template) {\r\n if (!projectName) {\r\n projectName = await input({\r\n message: \"请输入项目名称\",\r\n required: true,\r\n name: \"projectName\",\r\n validate: (value) => {\r\n if (!value) {\r\n return \"项目名称不能为空\";\r\n }\r\n return true;\r\n },\r\n });\r\n }\r\n\r\n // 选择模板\r\n if (template !== \"react\" && template !== \"vue\") {\r\n template = await select({\r\n message: \"请选择模板\",\r\n required: true,\r\n name: \"template\",\r\n choices: [\r\n { name: \" react\", value: REACT_REPO, description: \" react模板\" },\r\n { name: \" vue\", value: VUE_REPO, description: \" vue模板\" },\r\n ],\r\n });\r\n } else {\r\n // 当选择react或vue时,直接返回对应的模板\r\n template = { template_repo: template === \"react\" ? REACT_REPO : VUE_REPO };\r\n }\r\n return { projectName, template_repo: template };\r\n}\r\n\r\n/**\r\n * 判断是否需要覆盖文件夹\r\n * @param {string} dirPath 文件夹路径\r\n * @returns {Boolean} 是否需要覆盖\r\n */\r\nasync function coverDir(dirPath) {\r\n // 判断文件夹是否存在,存在则删除\r\n const isDirExist = await checkDirExist(dirPath);\r\n\r\n if (isDirExist) {\r\n const answer = await confirm({ message: \"文件夹已存在,是否覆盖?\" });\r\n\r\n // 如果选择覆盖,则删除文件夹\r\n if (answer) {\r\n await deleteDir(dirPath);\r\n } else {\r\n process.exit(0);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 删除文件夹\r\n * @param {string} dirPath 文件夹路径\r\n */\r\nasync function deleteDir(dirPath) {\r\n // 删除文件夹\r\n try {\r\n const spinner = ora(`请稍等...`).start();\r\n await fs.rm(dirPath, { recursive: true, force: true });\r\n spinner.succeed(\"覆盖文件夹成功\");\r\n } catch (error) {\r\n spinner.succeed(\"删除文件夹失败,请手动删除\");\r\n process.exit(0);\r\n }\r\n}\r\n\r\nasync function downloadTemplate(projectName, template_repo) {\r\n await coverDir(projectName);\r\n\r\n const spinner = ora(`正在下载模板...`).start();\r\n try {\r\n await download(template_repo, projectName, { clone: true });\r\n spinner.succeed(\"模板下载完成\");\r\n } catch (err) {\r\n spinner.fail(chalk.red(`模板下载失败: ${err.message}`));\r\n console.log(\"\");\r\n process.exit(1);\r\n }\r\n}\r\nasync function createProjectAction(projectName, template) {\r\n // 获取初始项目信息,包括项目名称和模板\r\n const initInfo = await getInitInfo(projectName, template);\r\n // 下载模板\r\n await downloadTemplate(initInfo.projectName, initInfo.template_repo);\r\n // 安装依赖\r\n await installDependencies(initInfo.projectName);\r\n}\r\n\r\n/**\r\n * 执行安装和启动命令\r\n * @param {string} projectName 项目名称\r\n */\r\nasync function installDependencies(projectName) {\r\n const answer = await confirm({ message: \"是否需要安装依赖?\" });\r\n\r\n if (!answer) {\r\n // 输出提示信息\r\n printLogForInstall(projectName);\r\n }\r\n\r\n const commandName = process.platform === \"win32\" ? \"pnpm.cmd\" : \"pnpm\";\r\n const options = {\r\n cwd: `./${projectName}`,\r\n shell: true,\r\n };\r\n await execCommand(commandName, [\"install\"], options);\r\n await execCommand(commandName, [\"run\", \"dev\"], options);\r\n}\r\n\r\nmodule.exports = createProjectAction;\r\n","const ejs = require(\"ejs\");\r\nconst path = require(\"path\");\r\nfunction renderEjs(template, data) {\r\n return new Promise((resolve, reject) => {\r\n const templatePath = `../template/${template}`;\r\n console.log(template);\r\n const absolutePath = path.resolve(__dirname, templatePath);\r\n\r\n ejs.renderFile(absolutePath, data, (err, str) => {\r\n if (err) {\r\n reject(err);\r\n } else {\r\n resolve(str);\r\n }\r\n });\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n renderEjs,\r\n};\r\n","const fs = require(\"node:fs/promises\");\r\n\r\nasync function writeFile(filePath, data) {\r\n try {\r\n await fs.writeFile(filePath, data, {\r\n encoding: \"utf-8\",\r\n });\r\n } catch (error) {\r\n console.log(\"创建文件失败:\", error);\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n writeFile,\r\n};\r\n","const fs = require(\"node:fs/promises\");\r\nconst { program } = require(\"commander\");\r\nconst ora = require(\"ora\");\r\nconst { select } = require(\"@inquirer/prompts\");\r\nconst chalk = require(\"chalk\");\r\nconst path = require(\"path\");\r\n\r\nconst createProjectAction = require(\"./create-project\");\r\nconst checkDirExist = require(\"../utils/checkDirExist\");\r\nconst execCommand = require(\"../utils/exec-command\");\r\nconst { renderEjs } = require(\"../utils/ejs-render\");\r\nconst { writeFile } = require(\"../utils/writeFile\");\r\n\r\nasync function addComponentAction(cnpName) {\r\n const type = program.opts().type;\r\n const componentName =\r\n type === \"react\" ? \"component.tsx.ejs\" : \"component.vue.ejs\";\r\n const templateRes = await renderEjs(componentName, {\r\n name: cnpName.toLowerCase(),\r\n });\r\n\r\n // 写入文件\r\n const destPath = program.opts().dest || `./src/views`;\r\n await createDir(destPath);\r\n await writeFile(`${destPath}/${cnpName}.vue`, templateRes);\r\n}\r\n\r\n/**\r\n * 根据传入的目录,创建文件夹\r\n * @param {string} dirPath\r\n * @returns\r\n */\r\nasync function createDir(dirPath) {\r\n if (!dirPath) return;\r\n const isDirExist = await checkDirExist(dirPath);\r\n // 如果文件夹存在,则不创建\r\n if (isDirExist) return;\r\n try {\r\n await fs.mkdir(dirPath, { recursive: true });\r\n } catch (error) {\r\n console.log(chalk.error(\"创建文件夹失败\"));\r\n process.exit(1);\r\n }\r\n}\r\n\r\nasync function copyFileAction(sourceDir, destPath) {\r\n try {\r\n await fs.cp(sourceDir, destPath, { recursive: true });\r\n } catch (error) {\r\n console.log(chalk.error(\"复制文件失败\"));\r\n process.exit(1);\r\n }\r\n}\r\n\r\n// async function addAxiosAction() {\r\n// const isWin32 = process.platform === \"win32\";\r\n// const answer = await select({\r\n// message: \"请选择安装axios的方式\",\r\n// choices: [\r\n// {\r\n// name: \"no\",\r\n// value: false,\r\n// },\r\n// {\r\n// name: \"pnpm\",\r\n// value: isWin32 ? \"pnpm.cmd\" : \"pnpm\",\r\n// },\r\n// {\r\n// name: \"npm\",\r\n// value: isWin32 ? \"npm.cmd\" : \"npm\",\r\n// },\r\n// ],\r\n// });\r\n\r\n// const dest = program.opts().dest ?? \"./src/request\";\r\n// // 拷贝axios封装库\r\n// await copyFileAction(path.join(__dirname, \"../modules/request\"), dest);\r\n// if (!answer) {\r\n// // 选择不安装axios\r\n// process.exit(0);\r\n// }\r\n\r\n// const spinner = ora(`请稍等...`).start();\r\n// try {\r\n// // 安装axios库\r\n// await execCommand(answer, [\"install\", \"axios\"], {\r\n// cwd: `./`,\r\n// shell: true,\r\n// });\r\n\r\n// spinner.succeed(\"安装axios成功\");\r\n// } catch (error) {\r\n// console.log(error);\r\n// spinner.fail(\"安装axios失败\");\r\n// }\r\n// }\r\n\r\nasync function addAxiosAction() {\r\n const dest = program.opts().dest ?? \"./src/request\";\r\n // 拷贝axios封装库\r\n await copyFileAction(path.join(__dirname, \"../modules/request\"), dest);\r\n console.log(chalk.green(\"文件拷贝成功\"));\r\n console.log(chalk.yellow(\"请手动安装axios依赖\"));\r\n process.exit(0);\r\n}\r\n\r\nasync function addRouterAction() {\r\n const dest = program.opts().dest ?? \"./src/router\";\r\n await copyFileAction(path.join(__dirname, \"../modules/router\"), dest);\r\n console.log(chalk.green(\"文件拷贝成功\"));\r\n console.log(chalk.yellow(\"请手动安装vue-router依赖\"));\r\n process.exit(0);\r\n}\r\n\r\nasync function addStoreAction() {\r\n const dest = program.opts().dest ?? \"./src/store\";\r\n await copyFileAction(path.join(__dirname, \"../modules/store\"), dest);\r\n console.log(chalk.green(\"文件拷贝成功\"));\r\n console.log(chalk.yellow(\"请手动安装pinia,pinia-plugin-persistedstate依赖\"));\r\n process.exit(0);\r\n}\r\n\r\nasync function addPageAction(cnpName) {\r\n if (!cnpName) {\r\n console.log(chalk.red(\"请输入组件名称\"));\r\n process.exit(0);\r\n }\r\n\r\n // 写入page组件\r\n const destPath = `./src/views/${cnpName.toLowerCase()}`;\r\n const templateRes = await renderEjs(\"component.vue.ejs\", {\r\n name: cnpName.toLowerCase(),\r\n });\r\n await createDir(destPath);\r\n await createDir(destPath + \"/c-cnps\");\r\n await writeFile(`${destPath}/${cnpName}.vue`, templateRes);\r\n\r\n // 写入route配置\r\n const routerModulesPath = `./src/router/modules`;\r\n const routerRes = await renderEjs(\"router.ejs\", {\r\n name: cnpName,\r\n });\r\n await createDir(routerModulesPath);\r\n await writeFile(\r\n `${routerModulesPath}/${cnpName.toLowerCase()}.ts`,\r\n routerRes,\r\n );\r\n\r\n // 写入store配置\r\n const storePath = `./src/store/${cnpName.toLowerCase()}`;\r\n const storeRes = await renderEjs(\"store.ejs\", {\r\n name: cnpName,\r\n });\r\n await createDir(storePath);\r\n await writeFile(`${storePath}/index.ts`, storeRes);\r\n await writeFile(`${storePath}/types.ts`, \"// TODO: types\");\r\n}\r\nmodule.exports = {\r\n createProjectAction,\r\n addComponentAction,\r\n createDir,\r\n addAxiosAction,\r\n addRouterAction,\r\n addStoreAction,\r\n addPageAction,\r\n};\r\n","#!/usr/bin/env node\nconst { program } = require(\"commander\");\nconst helpOptions = require(\"./core/help-options\");\nconst { version } = require(\"../package.json\");\nconst printWelcome = require(\"./core/print-welcome\");\nconst {\n createProjectAction,\n addComponentAction,\n createDir,\n addAxiosAction,\n addRouterAction,\n addStoreAction,\n addPageAction,\n} = require(\"./core/actions\");\n\nhelpOptions();\nprintWelcome();\nprogram.name(\"hyfcli\").description(\"一个自定义的脚手架工具\").version(version);\nprogram\n .command(\"create [projectName] [template]\")\n .description(\"创建新项目,例如:hyfcli create my-project vue\")\n .action(createProjectAction);\n\nprogram\n .command(\"addcpn <name>\")\n .description(\n \"添加一个组件,例如:hyfcli addcpn Home -t vue|react 默认是vue模版,默认位置/src/views\",\n )\n .action(addComponentAction);\n\nprogram\n .command(\"createDir <dirPath> \")\n .description(\"创建一个文件夹,例如:hyfcli createDir src/components\")\n .action(createDir);\n\nprogram\n .command(\"add-axios\")\n .description(\"添加基于axios的请求库\")\n .action(addAxiosAction);\n\nprogram\n .command(\"addrouter\")\n .description(\"添加动态加载的路由配置\")\n .action(addRouterAction);\n\nprogram\n .command(\"addstore\")\n .description(\"添加pinia状态管理,以及持久化配置\")\n .action(addStoreAction);\n\nprogram\n .command(\"addpage <pageName>\")\n .description(\"添加page,生成路由、组件、页面\")\n .action(addPageAction);\nprogram.parse(process.argv);\n"],"mappings":"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","names":["exports","module","exports","module","program","version","helpOptions","exports","module","exports","module","printWelcome","version","exports","module","exports","module","exports","module","exports","module","exports","module","spinner","createProjectAction","exports","module","exports","module","exports","module","program","createProjectAction","addComponentAction","createDir","addAxiosAction","addRouterAction","addStoreAction","addPageAction"]}
|
package/bin/index.mjs
ADDED
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
4
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
5
|
+
}) : x)(function(x) {
|
|
6
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
7
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
8
|
+
});
|
|
9
|
+
var __commonJS = (cb, mod) => function __require2() {
|
|
10
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// package.json
|
|
14
|
+
var require_package = __commonJS({
|
|
15
|
+
"package.json"(exports, module) {
|
|
16
|
+
module.exports = {
|
|
17
|
+
name: "hyfcli",
|
|
18
|
+
version: "1.0.0",
|
|
19
|
+
description: "",
|
|
20
|
+
main: "index.js",
|
|
21
|
+
bin: {
|
|
22
|
+
hyfcli: "./bin/index.js"
|
|
23
|
+
},
|
|
24
|
+
scripts: {
|
|
25
|
+
build: "tsup",
|
|
26
|
+
test: 'echo "Error: no test specified" && exit 1'
|
|
27
|
+
},
|
|
28
|
+
keywords: [
|
|
29
|
+
"vue",
|
|
30
|
+
"react",
|
|
31
|
+
"cli",
|
|
32
|
+
"template"
|
|
33
|
+
],
|
|
34
|
+
author: "hyf",
|
|
35
|
+
license: "ISC",
|
|
36
|
+
packageManager: "pnpm@10.20.0",
|
|
37
|
+
dependencies: {
|
|
38
|
+
"@inquirer/prompts": "^8.5.2",
|
|
39
|
+
axios: "^1.18.0",
|
|
40
|
+
chalk: "4.1.2",
|
|
41
|
+
commander: "^15.0.0",
|
|
42
|
+
"download-git-repo": "^3.0.2",
|
|
43
|
+
ejs: "^6.0.1",
|
|
44
|
+
figlet: "^1.11.0",
|
|
45
|
+
ora: "^4.1.1"
|
|
46
|
+
},
|
|
47
|
+
devDependencies: {
|
|
48
|
+
tsup: "^8.5.1",
|
|
49
|
+
typescript: "^6.0.3"
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// lib/core/help-options.js
|
|
56
|
+
var require_help_options = __commonJS({
|
|
57
|
+
"lib/core/help-options.js"(exports, module) {
|
|
58
|
+
var { program: program2 } = __require("commander");
|
|
59
|
+
var { version: version2 } = require_package();
|
|
60
|
+
function helpOptions2() {
|
|
61
|
+
program2.option("-d, --dest <dest>", "\u6307\u5B9A\u76EE\u6807\u6587\u4EF6\u5939");
|
|
62
|
+
program2.option("-t, --type <type>", "\u6307\u5B9A\u7EC4\u4EF6\u7C7B\u578B");
|
|
63
|
+
}
|
|
64
|
+
module.exports = helpOptions2;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// lib/utils/text-position.js
|
|
69
|
+
var require_text_position = __commonJS({
|
|
70
|
+
"lib/utils/text-position.js"(exports, module) {
|
|
71
|
+
function centerLine(text, width = process.stdout.columns || 80) {
|
|
72
|
+
const pad = Math.max(0, Math.floor((width - text.length) / 2));
|
|
73
|
+
return " ".repeat(pad) + text;
|
|
74
|
+
}
|
|
75
|
+
function centerFiglet(figletText, width = process.stdout.columns || 80) {
|
|
76
|
+
const lines = figletText.split("\n");
|
|
77
|
+
return lines.map((line) => {
|
|
78
|
+
const trimmed = line.trimEnd();
|
|
79
|
+
const pad = Math.max(0, Math.floor((width - trimmed.length) / 2));
|
|
80
|
+
return " ".repeat(pad) + trimmed;
|
|
81
|
+
}).join("\n");
|
|
82
|
+
}
|
|
83
|
+
function positionFiglet(figletText, pad = 10) {
|
|
84
|
+
const lines = figletText.split("\n");
|
|
85
|
+
return lines.map((line) => {
|
|
86
|
+
const trimmed = line.trimEnd();
|
|
87
|
+
return " ".repeat(pad) + trimmed;
|
|
88
|
+
}).join("\n");
|
|
89
|
+
}
|
|
90
|
+
module.exports = {
|
|
91
|
+
centerLine,
|
|
92
|
+
centerFiglet,
|
|
93
|
+
positionFiglet
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// lib/core/print-welcome.js
|
|
99
|
+
var require_print_welcome = __commonJS({
|
|
100
|
+
"lib/core/print-welcome.js"(exports, module) {
|
|
101
|
+
var chalk = __require("chalk");
|
|
102
|
+
var figlet = __require("figlet");
|
|
103
|
+
var { centerFiglet, positionFiglet } = require_text_position();
|
|
104
|
+
function generateBannerSync(text, font = "Standard") {
|
|
105
|
+
try {
|
|
106
|
+
return figlet.textSync(text, { font });
|
|
107
|
+
} catch (err) {
|
|
108
|
+
throw err;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function printWelcome2() {
|
|
112
|
+
const { version: version2, name } = require_package();
|
|
113
|
+
console.log(version2, name);
|
|
114
|
+
const banner = generateBannerSync(name);
|
|
115
|
+
console.log(chalk.green(positionFiglet(banner)));
|
|
116
|
+
}
|
|
117
|
+
module.exports = printWelcome2;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
// lib/utils/checkDirExist.js
|
|
122
|
+
var require_checkDirExist = __commonJS({
|
|
123
|
+
"lib/utils/checkDirExist.js"(exports, module) {
|
|
124
|
+
var fs = __require("fs");
|
|
125
|
+
module.exports = function checkDirExist(dirName) {
|
|
126
|
+
return new Promise((resolve, reject) => {
|
|
127
|
+
fs.access(dirName, fs.constants.F_OK, (err) => {
|
|
128
|
+
if (err) {
|
|
129
|
+
resolve(false);
|
|
130
|
+
} else {
|
|
131
|
+
resolve(true);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
// lib/utils/exec-command.js
|
|
140
|
+
var require_exec_command = __commonJS({
|
|
141
|
+
"lib/utils/exec-command.js"(exports, module) {
|
|
142
|
+
var { spawn } = __require("child_process");
|
|
143
|
+
var checkDirExist = require_checkDirExist();
|
|
144
|
+
module.exports = async function execCommand(...args) {
|
|
145
|
+
return new Promise((resolve, reject) => {
|
|
146
|
+
const childProcess = spawn(...args);
|
|
147
|
+
childProcess.stdout.pipe(process.stdout);
|
|
148
|
+
childProcess.stderr.pipe(process.stderr);
|
|
149
|
+
childProcess.on("close", (code) => {
|
|
150
|
+
console.log("code::", code);
|
|
151
|
+
resolve();
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
// lib/config/repo.js
|
|
159
|
+
var require_repo = __commonJS({
|
|
160
|
+
"lib/config/repo.js"(exports, module) {
|
|
161
|
+
var REACT_REPO = "direct:https://gitee.com/hyf120/react18--vite5---ts.git#master";
|
|
162
|
+
var VUE_REPO = "direct:https://gitee.com/hyf120/common_vue_template.git#master";
|
|
163
|
+
module.exports = {
|
|
164
|
+
REACT_REPO,
|
|
165
|
+
VUE_REPO
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
// lib/utils/print-log.js
|
|
171
|
+
var require_print_log = __commonJS({
|
|
172
|
+
"lib/utils/print-log.js"(exports, module) {
|
|
173
|
+
var chalk = __require("chalk");
|
|
174
|
+
function printLogForInstall(projectName) {
|
|
175
|
+
console.log(chalk.yellow(`--`.repeat(30)));
|
|
176
|
+
console.log("");
|
|
177
|
+
console.log(chalk.green(` cd ${projectName}`));
|
|
178
|
+
console.log(chalk.green(` pnpm install`));
|
|
179
|
+
console.log(chalk.green(` pnpm run dev`));
|
|
180
|
+
console.log("");
|
|
181
|
+
console.log(chalk.yellow(`--`.repeat(30)));
|
|
182
|
+
process.exit(0);
|
|
183
|
+
}
|
|
184
|
+
module.exports = {
|
|
185
|
+
printLogForInstall
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
// lib/core/create-project.js
|
|
191
|
+
var require_create_project = __commonJS({
|
|
192
|
+
"lib/core/create-project.js"(exports, module) {
|
|
193
|
+
var { promisify } = __require("util");
|
|
194
|
+
var fs = __require("fs/promises");
|
|
195
|
+
var download = promisify(__require("download-git-repo"));
|
|
196
|
+
var ora = __require("ora");
|
|
197
|
+
var chalk = __require("chalk");
|
|
198
|
+
var { select, input, confirm } = __require("@inquirer/prompts");
|
|
199
|
+
var execCommand = require_exec_command();
|
|
200
|
+
var { REACT_REPO, VUE_REPO } = require_repo();
|
|
201
|
+
var checkDirExist = require_checkDirExist();
|
|
202
|
+
var { printLogForInstall } = require_print_log();
|
|
203
|
+
async function getInitInfo(projectName, template) {
|
|
204
|
+
if (!projectName) {
|
|
205
|
+
projectName = await input({
|
|
206
|
+
message: "\u8BF7\u8F93\u5165\u9879\u76EE\u540D\u79F0",
|
|
207
|
+
required: true,
|
|
208
|
+
name: "projectName",
|
|
209
|
+
validate: (value) => {
|
|
210
|
+
if (!value) {
|
|
211
|
+
return "\u9879\u76EE\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A";
|
|
212
|
+
}
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
if (template !== "react" && template !== "vue") {
|
|
218
|
+
template = await select({
|
|
219
|
+
message: "\u8BF7\u9009\u62E9\u6A21\u677F",
|
|
220
|
+
required: true,
|
|
221
|
+
name: "template",
|
|
222
|
+
choices: [
|
|
223
|
+
{ name: " react", value: REACT_REPO, description: " react\u6A21\u677F" },
|
|
224
|
+
{ name: " vue", value: VUE_REPO, description: " vue\u6A21\u677F" }
|
|
225
|
+
]
|
|
226
|
+
});
|
|
227
|
+
} else {
|
|
228
|
+
template = { template_repo: template === "react" ? REACT_REPO : VUE_REPO };
|
|
229
|
+
}
|
|
230
|
+
return { projectName, template_repo: template };
|
|
231
|
+
}
|
|
232
|
+
async function coverDir(dirPath) {
|
|
233
|
+
const isDirExist = await checkDirExist(dirPath);
|
|
234
|
+
if (isDirExist) {
|
|
235
|
+
const answer = await confirm({ message: "\u6587\u4EF6\u5939\u5DF2\u5B58\u5728\uFF0C\u662F\u5426\u8986\u76D6?" });
|
|
236
|
+
if (answer) {
|
|
237
|
+
await deleteDir(dirPath);
|
|
238
|
+
} else {
|
|
239
|
+
process.exit(0);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
async function deleteDir(dirPath) {
|
|
244
|
+
try {
|
|
245
|
+
const spinner2 = ora(`\u8BF7\u7A0D\u7B49...`).start();
|
|
246
|
+
await fs.rm(dirPath, { recursive: true, force: true });
|
|
247
|
+
spinner2.succeed("\u8986\u76D6\u6587\u4EF6\u5939\u6210\u529F");
|
|
248
|
+
} catch (error) {
|
|
249
|
+
spinner.succeed("\u5220\u9664\u6587\u4EF6\u5939\u5931\u8D25\uFF0C\u8BF7\u624B\u52A8\u5220\u9664");
|
|
250
|
+
process.exit(0);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
async function downloadTemplate(projectName, template_repo) {
|
|
254
|
+
await coverDir(projectName);
|
|
255
|
+
const spinner2 = ora(`\u6B63\u5728\u4E0B\u8F7D\u6A21\u677F...`).start();
|
|
256
|
+
try {
|
|
257
|
+
await download(template_repo, projectName, { clone: true });
|
|
258
|
+
spinner2.succeed("\u6A21\u677F\u4E0B\u8F7D\u5B8C\u6210");
|
|
259
|
+
} catch (err) {
|
|
260
|
+
spinner2.fail(chalk.red(`\u6A21\u677F\u4E0B\u8F7D\u5931\u8D25: ${err.message}`));
|
|
261
|
+
console.log("");
|
|
262
|
+
process.exit(1);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
async function createProjectAction2(projectName, template) {
|
|
266
|
+
const initInfo = await getInitInfo(projectName, template);
|
|
267
|
+
await downloadTemplate(initInfo.projectName, initInfo.template_repo);
|
|
268
|
+
await installDependencies(initInfo.projectName);
|
|
269
|
+
}
|
|
270
|
+
async function installDependencies(projectName) {
|
|
271
|
+
const answer = await confirm({ message: "\u662F\u5426\u9700\u8981\u5B89\u88C5\u4F9D\u8D56?" });
|
|
272
|
+
if (!answer) {
|
|
273
|
+
printLogForInstall(projectName);
|
|
274
|
+
}
|
|
275
|
+
const commandName = process.platform === "win32" ? "pnpm.cmd" : "pnpm";
|
|
276
|
+
const options = {
|
|
277
|
+
cwd: `./${projectName}`,
|
|
278
|
+
shell: true
|
|
279
|
+
};
|
|
280
|
+
await execCommand(commandName, ["install"], options);
|
|
281
|
+
await execCommand(commandName, ["run", "dev"], options);
|
|
282
|
+
}
|
|
283
|
+
module.exports = createProjectAction2;
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
// lib/utils/ejs-render.js
|
|
288
|
+
var require_ejs_render = __commonJS({
|
|
289
|
+
"lib/utils/ejs-render.js"(exports, module) {
|
|
290
|
+
var ejs = __require("ejs");
|
|
291
|
+
var path = __require("path");
|
|
292
|
+
function renderEjs(template, data) {
|
|
293
|
+
return new Promise((resolve, reject) => {
|
|
294
|
+
const templatePath = `../template/${template}`;
|
|
295
|
+
console.log(template);
|
|
296
|
+
const absolutePath = path.resolve(__dirname, templatePath);
|
|
297
|
+
ejs.renderFile(absolutePath, data, (err, str) => {
|
|
298
|
+
if (err) {
|
|
299
|
+
reject(err);
|
|
300
|
+
} else {
|
|
301
|
+
resolve(str);
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
module.exports = {
|
|
307
|
+
renderEjs
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
// lib/utils/writeFile.js
|
|
313
|
+
var require_writeFile = __commonJS({
|
|
314
|
+
"lib/utils/writeFile.js"(exports, module) {
|
|
315
|
+
var fs = __require("fs/promises");
|
|
316
|
+
async function writeFile(filePath, data) {
|
|
317
|
+
try {
|
|
318
|
+
await fs.writeFile(filePath, data, {
|
|
319
|
+
encoding: "utf-8"
|
|
320
|
+
});
|
|
321
|
+
} catch (error) {
|
|
322
|
+
console.log("\u521B\u5EFA\u6587\u4EF6\u5931\u8D25\uFF1A", error);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
module.exports = {
|
|
326
|
+
writeFile
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
// lib/core/actions.js
|
|
332
|
+
var require_actions = __commonJS({
|
|
333
|
+
"lib/core/actions.js"(exports, module) {
|
|
334
|
+
var fs = __require("fs/promises");
|
|
335
|
+
var { program: program2 } = __require("commander");
|
|
336
|
+
var ora = __require("ora");
|
|
337
|
+
var { select } = __require("@inquirer/prompts");
|
|
338
|
+
var chalk = __require("chalk");
|
|
339
|
+
var path = __require("path");
|
|
340
|
+
var createProjectAction2 = require_create_project();
|
|
341
|
+
var checkDirExist = require_checkDirExist();
|
|
342
|
+
var execCommand = require_exec_command();
|
|
343
|
+
var { renderEjs } = require_ejs_render();
|
|
344
|
+
var { writeFile } = require_writeFile();
|
|
345
|
+
async function addComponentAction2(cnpName) {
|
|
346
|
+
const type = program2.opts().type;
|
|
347
|
+
const componentName = type === "react" ? "component.tsx.ejs" : "component.vue.ejs";
|
|
348
|
+
const templateRes = await renderEjs(componentName, {
|
|
349
|
+
name: cnpName.toLowerCase()
|
|
350
|
+
});
|
|
351
|
+
const destPath = program2.opts().dest || `./src/views`;
|
|
352
|
+
await createDir2(destPath);
|
|
353
|
+
await writeFile(`${destPath}/${cnpName}.vue`, templateRes);
|
|
354
|
+
}
|
|
355
|
+
async function createDir2(dirPath) {
|
|
356
|
+
if (!dirPath) return;
|
|
357
|
+
const isDirExist = await checkDirExist(dirPath);
|
|
358
|
+
if (isDirExist) return;
|
|
359
|
+
try {
|
|
360
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
361
|
+
} catch (error) {
|
|
362
|
+
console.log(chalk.error("\u521B\u5EFA\u6587\u4EF6\u5939\u5931\u8D25"));
|
|
363
|
+
process.exit(1);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
async function copyFileAction(sourceDir, destPath) {
|
|
367
|
+
try {
|
|
368
|
+
await fs.cp(sourceDir, destPath, { recursive: true });
|
|
369
|
+
} catch (error) {
|
|
370
|
+
console.log(chalk.error("\u590D\u5236\u6587\u4EF6\u5931\u8D25"));
|
|
371
|
+
process.exit(1);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
async function addAxiosAction2() {
|
|
375
|
+
const dest = program2.opts().dest ?? "./src/request";
|
|
376
|
+
await copyFileAction(path.join(__dirname, "../modules/request"), dest);
|
|
377
|
+
console.log(chalk.green("\u6587\u4EF6\u62F7\u8D1D\u6210\u529F"));
|
|
378
|
+
console.log(chalk.yellow("\u8BF7\u624B\u52A8\u5B89\u88C5axios\u4F9D\u8D56"));
|
|
379
|
+
process.exit(0);
|
|
380
|
+
}
|
|
381
|
+
async function addRouterAction2() {
|
|
382
|
+
const dest = program2.opts().dest ?? "./src/router";
|
|
383
|
+
await copyFileAction(path.join(__dirname, "../modules/router"), dest);
|
|
384
|
+
console.log(chalk.green("\u6587\u4EF6\u62F7\u8D1D\u6210\u529F"));
|
|
385
|
+
console.log(chalk.yellow("\u8BF7\u624B\u52A8\u5B89\u88C5vue-router\u4F9D\u8D56"));
|
|
386
|
+
process.exit(0);
|
|
387
|
+
}
|
|
388
|
+
async function addStoreAction2() {
|
|
389
|
+
const dest = program2.opts().dest ?? "./src/store";
|
|
390
|
+
await copyFileAction(path.join(__dirname, "../modules/store"), dest);
|
|
391
|
+
console.log(chalk.green("\u6587\u4EF6\u62F7\u8D1D\u6210\u529F"));
|
|
392
|
+
console.log(chalk.yellow("\u8BF7\u624B\u52A8\u5B89\u88C5pinia,pinia-plugin-persistedstate\u4F9D\u8D56"));
|
|
393
|
+
process.exit(0);
|
|
394
|
+
}
|
|
395
|
+
async function addPageAction2(cnpName) {
|
|
396
|
+
if (!cnpName) {
|
|
397
|
+
console.log(chalk.red("\u8BF7\u8F93\u5165\u7EC4\u4EF6\u540D\u79F0"));
|
|
398
|
+
process.exit(0);
|
|
399
|
+
}
|
|
400
|
+
const destPath = `./src/views/${cnpName.toLowerCase()}`;
|
|
401
|
+
const templateRes = await renderEjs("component.vue.ejs", {
|
|
402
|
+
name: cnpName.toLowerCase()
|
|
403
|
+
});
|
|
404
|
+
await createDir2(destPath);
|
|
405
|
+
await createDir2(destPath + "/c-cnps");
|
|
406
|
+
await writeFile(`${destPath}/${cnpName}.vue`, templateRes);
|
|
407
|
+
const routerModulesPath = `./src/router/modules`;
|
|
408
|
+
const routerRes = await renderEjs("router.ejs", {
|
|
409
|
+
name: cnpName
|
|
410
|
+
});
|
|
411
|
+
await createDir2(routerModulesPath);
|
|
412
|
+
await writeFile(
|
|
413
|
+
`${routerModulesPath}/${cnpName.toLowerCase()}.ts`,
|
|
414
|
+
routerRes
|
|
415
|
+
);
|
|
416
|
+
const storePath = `./src/store/${cnpName.toLowerCase()}`;
|
|
417
|
+
const storeRes = await renderEjs("store.ejs", {
|
|
418
|
+
name: cnpName
|
|
419
|
+
});
|
|
420
|
+
await createDir2(storePath);
|
|
421
|
+
await writeFile(`${storePath}/index.ts`, storeRes);
|
|
422
|
+
await writeFile(`${storePath}/types.ts`, "// TODO: types");
|
|
423
|
+
}
|
|
424
|
+
module.exports = {
|
|
425
|
+
createProjectAction: createProjectAction2,
|
|
426
|
+
addComponentAction: addComponentAction2,
|
|
427
|
+
createDir: createDir2,
|
|
428
|
+
addAxiosAction: addAxiosAction2,
|
|
429
|
+
addRouterAction: addRouterAction2,
|
|
430
|
+
addStoreAction: addStoreAction2,
|
|
431
|
+
addPageAction: addPageAction2
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
});
|
|
435
|
+
|
|
436
|
+
// lib/index.js
|
|
437
|
+
var { program } = __require("commander");
|
|
438
|
+
var helpOptions = require_help_options();
|
|
439
|
+
var { version } = require_package();
|
|
440
|
+
var printWelcome = require_print_welcome();
|
|
441
|
+
var {
|
|
442
|
+
createProjectAction,
|
|
443
|
+
addComponentAction,
|
|
444
|
+
createDir,
|
|
445
|
+
addAxiosAction,
|
|
446
|
+
addRouterAction,
|
|
447
|
+
addStoreAction,
|
|
448
|
+
addPageAction
|
|
449
|
+
} = require_actions();
|
|
450
|
+
helpOptions();
|
|
451
|
+
printWelcome();
|
|
452
|
+
program.name("hyfcli").description("\u4E00\u4E2A\u81EA\u5B9A\u4E49\u7684\u811A\u624B\u67B6\u5DE5\u5177").version(version);
|
|
453
|
+
program.command("create [projectName] [template]").description("\u521B\u5EFA\u65B0\u9879\u76EE,\u4F8B\u5982\uFF1Ahyfcli create my-project vue").action(createProjectAction);
|
|
454
|
+
program.command("addcpn <name>").description(
|
|
455
|
+
"\u6DFB\u52A0\u4E00\u4E2A\u7EC4\u4EF6\uFF0C\u4F8B\u5982\uFF1Ahyfcli addcpn Home -t vue|react \u9ED8\u8BA4\u662Fvue\u6A21\u7248\uFF0C\u9ED8\u8BA4\u4F4D\u7F6E/src/views"
|
|
456
|
+
).action(addComponentAction);
|
|
457
|
+
program.command("createDir <dirPath> ").description("\u521B\u5EFA\u4E00\u4E2A\u6587\u4EF6\u5939\uFF0C\u4F8B\u5982\uFF1Ahyfcli createDir src/components").action(createDir);
|
|
458
|
+
program.command("add-axios").description("\u6DFB\u52A0\u57FA\u4E8Eaxios\u7684\u8BF7\u6C42\u5E93").action(addAxiosAction);
|
|
459
|
+
program.command("addrouter").description("\u6DFB\u52A0\u52A8\u6001\u52A0\u8F7D\u7684\u8DEF\u7531\u914D\u7F6E").action(addRouterAction);
|
|
460
|
+
program.command("addstore").description("\u6DFB\u52A0pinia\u72B6\u6001\u7BA1\u7406,\u4EE5\u53CA\u6301\u4E45\u5316\u914D\u7F6E").action(addStoreAction);
|
|
461
|
+
program.command("addpage <pageName>").description("\u6DFB\u52A0page,\u751F\u6210\u8DEF\u7531\u3001\u7EC4\u4EF6\u3001\u9875\u9762").action(addPageAction);
|
|
462
|
+
program.parse(process.argv);
|
|
463
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../package.json","../lib/core/help-options.js","../lib/utils/text-position.js","../lib/core/print-welcome.js","../lib/utils/checkDirExist.js","../lib/utils/exec-command.js","../lib/config/repo.js","../lib/utils/print-log.js","../lib/core/create-project.js","../lib/utils/ejs-render.js","../lib/utils/writeFile.js","../lib/core/actions.js","../lib/index.js"],"sourcesContent":["{\n \"name\": \"hyfcli\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"bin\": {\n \"hyfcli\": \"./bin/index.js\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [\n \"vue\",\n \"react\",\n \"cli\",\n \"template\"\n ],\n \"author\": \"hyf\",\n \"license\": \"ISC\",\n \"packageManager\": \"pnpm@10.20.0\",\n \"dependencies\": {\n \"@inquirer/prompts\": \"^8.5.2\",\n \"axios\": \"^1.18.0\",\n \"chalk\": \"4.1.2\",\n \"commander\": \"^15.0.0\",\n \"download-git-repo\": \"^3.0.2\",\n \"ejs\": \"^6.0.1\",\n \"figlet\": \"^1.11.0\",\n \"ora\": \"^4.1.1\"\n },\n \"devDependencies\": {\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^6.0.3\"\n }\n}\n","const { program } = require(\"commander\");\r\nconst { version } = require(\"../../package.json\");\r\nfunction helpOptions() {\r\n program.option(\"-d, --dest <dest>\", \"指定目标文件夹\");\r\n program.option(\"-t, --type <type>\", \"指定组件类型\");\r\n}\r\n\r\nmodule.exports = helpOptions;\r\n","/**\r\n * 文本居中\r\n * @type {string} text\r\n * @param {number} width\r\n * @return {string}\r\n */\r\nfunction centerLine(text, width = process.stdout.columns || 80) {\r\n const pad = Math.max(0, Math.floor((width - text.length) / 2));\r\n\r\n return \" \".repeat(pad) + text;\r\n}\r\n\r\n/**\r\n * Figlet 文本居中\r\n * @type {string} figletText\r\n * @param {number} width\r\n * @return {string}\r\n */\r\nfunction centerFiglet(figletText, width = process.stdout.columns || 80) {\r\n const lines = figletText.split(\"\\n\");\r\n return lines\r\n .map((line) => {\r\n const trimmed = line.trimEnd(); // 保留左侧空白,去除右侧多余空格\r\n const pad = Math.max(0, Math.floor((width - trimmed.length) / 2));\r\n return \" \".repeat(pad) + trimmed;\r\n })\r\n .join(\"\\n\");\r\n}\r\n\r\n/**\r\n * 自定义文本位置\r\n * @param {string} figletText Figlet 文本\r\n * @param {number} pad 左侧空白\r\n * @returns {string}\r\n *\r\n */\r\nfunction positionFiglet(figletText, pad = 10) {\r\n const lines = figletText.split(\"\\n\");\r\n return lines\r\n .map((line) => {\r\n const trimmed = line.trimEnd(); // 保留左侧空白,去除右侧多余空格\r\n return \" \".repeat(pad) + trimmed;\r\n })\r\n .join(\"\\n\");\r\n}\r\nmodule.exports = {\r\n centerLine,\r\n centerFiglet,\r\n positionFiglet,\r\n};\r\n","const chalk = require(\"chalk\");\r\nconst figlet = require(\"figlet\");\r\nconst { centerFiglet, positionFiglet } = require(\"../utils/text-position\");\r\nfunction generateBannerSync(text, font = \"Standard\") {\r\n try {\r\n return figlet.textSync(text, { font });\r\n } catch (err) {\r\n throw err;\r\n }\r\n}\r\n\r\nfunction printWelcome() {\r\n const { version, name } = require(\"../../package.json\");\r\n console.log(version, name);\r\n const banner = generateBannerSync(name);\r\n console.log(chalk.green(positionFiglet(banner)));\r\n}\r\n\r\nmodule.exports = printWelcome;\r\n","const fs = require(\"fs\");\r\n\r\nmodule.exports = function checkDirExist(dirName) {\r\n return new Promise((resolve, reject) => {\r\n fs.access(dirName, fs.constants.F_OK, (err) => {\r\n if (err) {\r\n resolve(false);\r\n } else {\r\n resolve(true);\r\n }\r\n });\r\n });\r\n};\r\n","const { spawn } = require(\"child_process\");\r\nconst checkDirExist = require(\"./checkDirExist\");\r\nmodule.exports = async function execCommand(...args) {\r\n return new Promise((resolve, reject) => {\r\n const childProcess = spawn(...args); // 启用 shell });\r\n childProcess.stdout.pipe(process.stdout);\r\n childProcess.stderr.pipe(process.stderr);\r\n childProcess.on(\"close\", (code) => {\r\n console.log(\"code::\", code);\r\n resolve();\r\n });\r\n });\r\n};\r\n","const REACT_REPO =\r\n \"direct:https://gitee.com/hyf120/react18--vite5---ts.git#master\";\r\nconst VUE_REPO =\r\n \"direct:https://gitee.com/hyf120/common_vue_template.git#master\";\r\nmodule.exports = {\r\n REACT_REPO,\r\n VUE_REPO,\r\n};\r\n","const chalk = require(\"chalk\");\r\nfunction printLogForInstall(projectName) {\r\n console.log(chalk.yellow(`--`.repeat(30)));\r\n console.log(\"\");\r\n console.log(chalk.green(` cd ${projectName}`));\r\n console.log(chalk.green(` pnpm install`));\r\n console.log(chalk.green(` pnpm run dev`));\r\n console.log(\"\");\r\n console.log(chalk.yellow(`--`.repeat(30)));\r\n process.exit(0);\r\n}\r\n\r\nmodule.exports = {\r\n printLogForInstall,\r\n};\r\n","const { promisify } = require(\"util\");\r\nconst fs = require(\"node:fs/promises\");\r\nconst download = promisify(require(\"download-git-repo\"));\r\nconst ora = require(\"ora\");\r\nconst chalk = require(\"chalk\");\r\nconst { select, input, confirm } = require(\"@inquirer/prompts\");\r\n\r\nconst execCommand = require(\"../utils/exec-command\");\r\nconst { REACT_REPO, VUE_REPO } = require(\"../config/repo\");\r\nconst checkDirExist = require(\"../utils/checkDirExist\");\r\nconst { printLogForInstall } = require(\"../utils/print-log\");\r\nasync function getInitInfo(projectName, template) {\r\n if (!projectName) {\r\n projectName = await input({\r\n message: \"请输入项目名称\",\r\n required: true,\r\n name: \"projectName\",\r\n validate: (value) => {\r\n if (!value) {\r\n return \"项目名称不能为空\";\r\n }\r\n return true;\r\n },\r\n });\r\n }\r\n\r\n // 选择模板\r\n if (template !== \"react\" && template !== \"vue\") {\r\n template = await select({\r\n message: \"请选择模板\",\r\n required: true,\r\n name: \"template\",\r\n choices: [\r\n { name: \" react\", value: REACT_REPO, description: \" react模板\" },\r\n { name: \" vue\", value: VUE_REPO, description: \" vue模板\" },\r\n ],\r\n });\r\n } else {\r\n // 当选择react或vue时,直接返回对应的模板\r\n template = { template_repo: template === \"react\" ? REACT_REPO : VUE_REPO };\r\n }\r\n return { projectName, template_repo: template };\r\n}\r\n\r\n/**\r\n * 判断是否需要覆盖文件夹\r\n * @param {string} dirPath 文件夹路径\r\n * @returns {Boolean} 是否需要覆盖\r\n */\r\nasync function coverDir(dirPath) {\r\n // 判断文件夹是否存在,存在则删除\r\n const isDirExist = await checkDirExist(dirPath);\r\n\r\n if (isDirExist) {\r\n const answer = await confirm({ message: \"文件夹已存在,是否覆盖?\" });\r\n\r\n // 如果选择覆盖,则删除文件夹\r\n if (answer) {\r\n await deleteDir(dirPath);\r\n } else {\r\n process.exit(0);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 删除文件夹\r\n * @param {string} dirPath 文件夹路径\r\n */\r\nasync function deleteDir(dirPath) {\r\n // 删除文件夹\r\n try {\r\n const spinner = ora(`请稍等...`).start();\r\n await fs.rm(dirPath, { recursive: true, force: true });\r\n spinner.succeed(\"覆盖文件夹成功\");\r\n } catch (error) {\r\n spinner.succeed(\"删除文件夹失败,请手动删除\");\r\n process.exit(0);\r\n }\r\n}\r\n\r\nasync function downloadTemplate(projectName, template_repo) {\r\n await coverDir(projectName);\r\n\r\n const spinner = ora(`正在下载模板...`).start();\r\n try {\r\n await download(template_repo, projectName, { clone: true });\r\n spinner.succeed(\"模板下载完成\");\r\n } catch (err) {\r\n spinner.fail(chalk.red(`模板下载失败: ${err.message}`));\r\n console.log(\"\");\r\n process.exit(1);\r\n }\r\n}\r\nasync function createProjectAction(projectName, template) {\r\n // 获取初始项目信息,包括项目名称和模板\r\n const initInfo = await getInitInfo(projectName, template);\r\n // 下载模板\r\n await downloadTemplate(initInfo.projectName, initInfo.template_repo);\r\n // 安装依赖\r\n await installDependencies(initInfo.projectName);\r\n}\r\n\r\n/**\r\n * 执行安装和启动命令\r\n * @param {string} projectName 项目名称\r\n */\r\nasync function installDependencies(projectName) {\r\n const answer = await confirm({ message: \"是否需要安装依赖?\" });\r\n\r\n if (!answer) {\r\n // 输出提示信息\r\n printLogForInstall(projectName);\r\n }\r\n\r\n const commandName = process.platform === \"win32\" ? \"pnpm.cmd\" : \"pnpm\";\r\n const options = {\r\n cwd: `./${projectName}`,\r\n shell: true,\r\n };\r\n await execCommand(commandName, [\"install\"], options);\r\n await execCommand(commandName, [\"run\", \"dev\"], options);\r\n}\r\n\r\nmodule.exports = createProjectAction;\r\n","const ejs = require(\"ejs\");\r\nconst path = require(\"path\");\r\nfunction renderEjs(template, data) {\r\n return new Promise((resolve, reject) => {\r\n const templatePath = `../template/${template}`;\r\n console.log(template);\r\n const absolutePath = path.resolve(__dirname, templatePath);\r\n\r\n ejs.renderFile(absolutePath, data, (err, str) => {\r\n if (err) {\r\n reject(err);\r\n } else {\r\n resolve(str);\r\n }\r\n });\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n renderEjs,\r\n};\r\n","const fs = require(\"node:fs/promises\");\r\n\r\nasync function writeFile(filePath, data) {\r\n try {\r\n await fs.writeFile(filePath, data, {\r\n encoding: \"utf-8\",\r\n });\r\n } catch (error) {\r\n console.log(\"创建文件失败:\", error);\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n writeFile,\r\n};\r\n","const fs = require(\"node:fs/promises\");\r\nconst { program } = require(\"commander\");\r\nconst ora = require(\"ora\");\r\nconst { select } = require(\"@inquirer/prompts\");\r\nconst chalk = require(\"chalk\");\r\nconst path = require(\"path\");\r\n\r\nconst createProjectAction = require(\"./create-project\");\r\nconst checkDirExist = require(\"../utils/checkDirExist\");\r\nconst execCommand = require(\"../utils/exec-command\");\r\nconst { renderEjs } = require(\"../utils/ejs-render\");\r\nconst { writeFile } = require(\"../utils/writeFile\");\r\n\r\nasync function addComponentAction(cnpName) {\r\n const type = program.opts().type;\r\n const componentName =\r\n type === \"react\" ? \"component.tsx.ejs\" : \"component.vue.ejs\";\r\n const templateRes = await renderEjs(componentName, {\r\n name: cnpName.toLowerCase(),\r\n });\r\n\r\n // 写入文件\r\n const destPath = program.opts().dest || `./src/views`;\r\n await createDir(destPath);\r\n await writeFile(`${destPath}/${cnpName}.vue`, templateRes);\r\n}\r\n\r\n/**\r\n * 根据传入的目录,创建文件夹\r\n * @param {string} dirPath\r\n * @returns\r\n */\r\nasync function createDir(dirPath) {\r\n if (!dirPath) return;\r\n const isDirExist = await checkDirExist(dirPath);\r\n // 如果文件夹存在,则不创建\r\n if (isDirExist) return;\r\n try {\r\n await fs.mkdir(dirPath, { recursive: true });\r\n } catch (error) {\r\n console.log(chalk.error(\"创建文件夹失败\"));\r\n process.exit(1);\r\n }\r\n}\r\n\r\nasync function copyFileAction(sourceDir, destPath) {\r\n try {\r\n await fs.cp(sourceDir, destPath, { recursive: true });\r\n } catch (error) {\r\n console.log(chalk.error(\"复制文件失败\"));\r\n process.exit(1);\r\n }\r\n}\r\n\r\n// async function addAxiosAction() {\r\n// const isWin32 = process.platform === \"win32\";\r\n// const answer = await select({\r\n// message: \"请选择安装axios的方式\",\r\n// choices: [\r\n// {\r\n// name: \"no\",\r\n// value: false,\r\n// },\r\n// {\r\n// name: \"pnpm\",\r\n// value: isWin32 ? \"pnpm.cmd\" : \"pnpm\",\r\n// },\r\n// {\r\n// name: \"npm\",\r\n// value: isWin32 ? \"npm.cmd\" : \"npm\",\r\n// },\r\n// ],\r\n// });\r\n\r\n// const dest = program.opts().dest ?? \"./src/request\";\r\n// // 拷贝axios封装库\r\n// await copyFileAction(path.join(__dirname, \"../modules/request\"), dest);\r\n// if (!answer) {\r\n// // 选择不安装axios\r\n// process.exit(0);\r\n// }\r\n\r\n// const spinner = ora(`请稍等...`).start();\r\n// try {\r\n// // 安装axios库\r\n// await execCommand(answer, [\"install\", \"axios\"], {\r\n// cwd: `./`,\r\n// shell: true,\r\n// });\r\n\r\n// spinner.succeed(\"安装axios成功\");\r\n// } catch (error) {\r\n// console.log(error);\r\n// spinner.fail(\"安装axios失败\");\r\n// }\r\n// }\r\n\r\nasync function addAxiosAction() {\r\n const dest = program.opts().dest ?? \"./src/request\";\r\n // 拷贝axios封装库\r\n await copyFileAction(path.join(__dirname, \"../modules/request\"), dest);\r\n console.log(chalk.green(\"文件拷贝成功\"));\r\n console.log(chalk.yellow(\"请手动安装axios依赖\"));\r\n process.exit(0);\r\n}\r\n\r\nasync function addRouterAction() {\r\n const dest = program.opts().dest ?? \"./src/router\";\r\n await copyFileAction(path.join(__dirname, \"../modules/router\"), dest);\r\n console.log(chalk.green(\"文件拷贝成功\"));\r\n console.log(chalk.yellow(\"请手动安装vue-router依赖\"));\r\n process.exit(0);\r\n}\r\n\r\nasync function addStoreAction() {\r\n const dest = program.opts().dest ?? \"./src/store\";\r\n await copyFileAction(path.join(__dirname, \"../modules/store\"), dest);\r\n console.log(chalk.green(\"文件拷贝成功\"));\r\n console.log(chalk.yellow(\"请手动安装pinia,pinia-plugin-persistedstate依赖\"));\r\n process.exit(0);\r\n}\r\n\r\nasync function addPageAction(cnpName) {\r\n if (!cnpName) {\r\n console.log(chalk.red(\"请输入组件名称\"));\r\n process.exit(0);\r\n }\r\n\r\n // 写入page组件\r\n const destPath = `./src/views/${cnpName.toLowerCase()}`;\r\n const templateRes = await renderEjs(\"component.vue.ejs\", {\r\n name: cnpName.toLowerCase(),\r\n });\r\n await createDir(destPath);\r\n await createDir(destPath + \"/c-cnps\");\r\n await writeFile(`${destPath}/${cnpName}.vue`, templateRes);\r\n\r\n // 写入route配置\r\n const routerModulesPath = `./src/router/modules`;\r\n const routerRes = await renderEjs(\"router.ejs\", {\r\n name: cnpName,\r\n });\r\n await createDir(routerModulesPath);\r\n await writeFile(\r\n `${routerModulesPath}/${cnpName.toLowerCase()}.ts`,\r\n routerRes,\r\n );\r\n\r\n // 写入store配置\r\n const storePath = `./src/store/${cnpName.toLowerCase()}`;\r\n const storeRes = await renderEjs(\"store.ejs\", {\r\n name: cnpName,\r\n });\r\n await createDir(storePath);\r\n await writeFile(`${storePath}/index.ts`, storeRes);\r\n await writeFile(`${storePath}/types.ts`, \"// TODO: types\");\r\n}\r\nmodule.exports = {\r\n createProjectAction,\r\n addComponentAction,\r\n createDir,\r\n addAxiosAction,\r\n addRouterAction,\r\n addStoreAction,\r\n addPageAction,\r\n};\r\n","#!/usr/bin/env node\nconst { program } = require(\"commander\");\nconst helpOptions = require(\"./core/help-options\");\nconst { version } = require(\"../package.json\");\nconst printWelcome = require(\"./core/print-welcome\");\nconst {\n createProjectAction,\n addComponentAction,\n createDir,\n addAxiosAction,\n addRouterAction,\n addStoreAction,\n addPageAction,\n} = require(\"./core/actions\");\n\nhelpOptions();\nprintWelcome();\nprogram.name(\"hyfcli\").description(\"一个自定义的脚手架工具\").version(version);\nprogram\n .command(\"create [projectName] [template]\")\n .description(\"创建新项目,例如:hyfcli create my-project vue\")\n .action(createProjectAction);\n\nprogram\n .command(\"addcpn <name>\")\n .description(\n \"添加一个组件,例如:hyfcli addcpn Home -t vue|react 默认是vue模版,默认位置/src/views\",\n )\n .action(addComponentAction);\n\nprogram\n .command(\"createDir <dirPath> \")\n .description(\"创建一个文件夹,例如:hyfcli createDir src/components\")\n .action(createDir);\n\nprogram\n .command(\"add-axios\")\n .description(\"添加基于axios的请求库\")\n .action(addAxiosAction);\n\nprogram\n .command(\"addrouter\")\n .description(\"添加动态加载的路由配置\")\n .action(addRouterAction);\n\nprogram\n .command(\"addstore\")\n .description(\"添加pinia状态管理,以及持久化配置\")\n .action(addStoreAction);\n\nprogram\n .command(\"addpage <pageName>\")\n .description(\"添加page,生成路由、组件、页面\")\n .action(addPageAction);\nprogram.parse(process.argv);\n"],"mappings":"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","names":["program","version","helpOptions","printWelcome","version","spinner","createProjectAction","program","createProjectAction","addComponentAction","createDir","addAxiosAction","addRouterAction","addStoreAction","addPageAction"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "hyfcli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "一个项目开发脚手架工具",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"hyfcli": "./bin/index.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsup",
|
|
11
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"vue",
|
|
15
|
+
"react",
|
|
16
|
+
"cli",
|
|
17
|
+
"template"
|
|
18
|
+
],
|
|
19
|
+
"files": [
|
|
20
|
+
"./bin"
|
|
21
|
+
],
|
|
22
|
+
"author": "hyf",
|
|
23
|
+
"license": "ISC",
|
|
24
|
+
"packageManager": "pnpm@10.20.0",
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@inquirer/prompts": "^8.5.2",
|
|
27
|
+
"axios": "^1.18.0",
|
|
28
|
+
"chalk": "4.1.2",
|
|
29
|
+
"commander": "^15.0.0",
|
|
30
|
+
"download-git-repo": "^3.0.2",
|
|
31
|
+
"ejs": "^6.0.1",
|
|
32
|
+
"figlet": "^1.11.0",
|
|
33
|
+
"ora": "^4.1.1"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"tsup": "^8.5.1",
|
|
37
|
+
"typescript": "^6.0.3"
|
|
38
|
+
}
|
|
39
|
+
}
|