@yuer678/create-kb 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -0
- package/dist/index.js +6 -3
- package/package.json +3 -2
- package/templates/api/src/app.ts +13 -1
- package/templates/fullstack/server/src/app.ts +13 -1
package/README.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# @yuer678/create-kb
|
|
2
|
+
|
|
3
|
+
> [kb-ui](https://github.com/anyuer678/kb-ui) 脚手架 CLI:**7 种项目模板**一键创建,CLI 命令名仍是 `create-kb`。
|
|
4
|
+
|
|
5
|
+
> ⚠️ npm 上的 `create-kb`(无 scope)是**同名无关项目**,本包因此发布为 scoped 名 `@yuer678/create-kb`。
|
|
6
|
+
|
|
7
|
+
## 使用
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx @yuer678/create-kb my-app # 交互式选择模板
|
|
11
|
+
npx @yuer678/create-kb my-api --template api # 直接指定模板(7 选 1)
|
|
12
|
+
npx @yuer678/create-kb my-app --no-git -p npm # 不初始化 git / 指定包管理器
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## 模板
|
|
16
|
+
|
|
17
|
+
| 模板 | 说明 |
|
|
18
|
+
|------|------|
|
|
19
|
+
| `base` | 最小可用 Vue 3 + Vite + TS 前端 |
|
|
20
|
+
| `starter` | 带完整组件示例的前端(预装 [kb-ui-vue](https://www.npmjs.com/package/kb-ui-vue)) |
|
|
21
|
+
| `api` | Express + TypeScript + Zod 后端(源码与 [@yuer678/kb-api](https://www.npmjs.com/package/@yuer678/kb-api) 同步,含 supertest 测试) |
|
|
22
|
+
| `fullstack` | Vue 前端 + Express API + Docker Compose 一键起 |
|
|
23
|
+
| `electron` | Electron 桌面应用骨架(安全模型 + 打包) |
|
|
24
|
+
| `react` | React 19 + Vite 前端 |
|
|
25
|
+
| `ai` | LLM 工作台(OpenAI 兼容 + SSE 流式 + 聊天前端) |
|
|
26
|
+
|
|
27
|
+
## 相关包
|
|
28
|
+
|
|
29
|
+
- [`kb-ui-vue`](https://www.npmjs.com/package/kb-ui-vue) —— Vue 3 组件库(73 组件 / 46 主题)
|
|
30
|
+
- [`@yuer678/kb-utils`](https://www.npmjs.com/package/@yuer678/kb-utils) —— 通用 TS 工具函数库
|
|
31
|
+
- [`@yuer678/kb-api`](https://www.npmjs.com/package/@yuer678/kb-api) —— 参考后端(模板内后端与其同源同步)
|
|
32
|
+
- 仓库:<https://github.com/anyuer678/kb-ui>
|
|
33
|
+
|
|
34
|
+
## License
|
|
35
|
+
|
|
36
|
+
MIT
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
// src/index.ts
|
|
4
|
+
import { createRequire as createRequire2 } from "module";
|
|
4
5
|
import { Command } from "commander";
|
|
5
6
|
|
|
6
7
|
// src/prompts.ts
|
|
@@ -81,9 +82,9 @@ function templatesRoot() {
|
|
|
81
82
|
return join(__dirname, "../templates");
|
|
82
83
|
}
|
|
83
84
|
function kbVersion() {
|
|
84
|
-
const
|
|
85
|
+
const require3 = createRequire(import.meta.url);
|
|
85
86
|
try {
|
|
86
|
-
const pkg =
|
|
87
|
+
const pkg = require3("kb-ui-vue/package.json");
|
|
87
88
|
return pkg.version;
|
|
88
89
|
} catch {
|
|
89
90
|
console.warn('\u26A0 \u672A\u8BFB\u53D6\u5230 kb-ui-vue \u7248\u672C\uFF0C\u6A21\u677F\u5C06\u4F7F\u7528 "latest" \u4F5C\u4E3A\u4F9D\u8D56\u7248\u672C');
|
|
@@ -164,8 +165,10 @@ async function createProject(options) {
|
|
|
164
165
|
}
|
|
165
166
|
|
|
166
167
|
// src/index.ts
|
|
168
|
+
var require2 = createRequire2(import.meta.url);
|
|
169
|
+
var ownVersion = require2("../package.json").version ?? "unknown";
|
|
167
170
|
var program = new Command();
|
|
168
|
-
program.name("create-kb").description("\u521B\u5EFA\u4E00\u4E2A\u9884\u88C5
|
|
171
|
+
program.name("create-kb").description("\u521B\u5EFA\u4E00\u4E2A\u9884\u88C5 kb-ui-vue \u7684 Vue 3 + Vite + TypeScript \u9879\u76EE").version(ownVersion).argument("[project-name]", "\u9879\u76EE\u540D\u79F0").option("--template <template>", "\u6A21\u677F\uFF1Abase\uFF08\u6700\u5C0F\uFF09| starter\uFF08\u5B8C\u6574\u793A\u4F8B\uFF09| api\uFF08\u540E\u7AEF\uFF09| fullstack\uFF08\u5168\u6808\uFF09| electron\uFF08\u684C\u9762\uFF09| react | ai\uFF08LLM \u5DE5\u4F5C\u53F0\uFF09", "base").option("--no-git", "\u4E0D\u521D\u59CB\u5316 git \u4ED3\u5E93").option("-p, --package-manager <pm>", "\u5305\u7BA1\u7406\u5668\uFF1Apnpm | npm | yarn", "pnpm").action(async (projectName) => {
|
|
169
172
|
const cliOptions = program.opts();
|
|
170
173
|
if (projectName !== void 0) {
|
|
171
174
|
const result = validateProjectName(projectName);
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuer678/create-kb",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
|
+
"description": "kb-ui 脚手架 CLI:7 种项目模板(Vue3 前端 / Express 后端 / 全栈 / Electron / React / LLM 工作台)一键创建",
|
|
4
5
|
"license": "MIT",
|
|
5
6
|
"author": "anyuer678",
|
|
6
7
|
"repository": {
|
|
@@ -26,7 +27,7 @@
|
|
|
26
27
|
"dependencies": {
|
|
27
28
|
"commander": "^15.0.0",
|
|
28
29
|
"prompts": "^2.4.2",
|
|
29
|
-
"kb-ui-vue": "0.4.
|
|
30
|
+
"kb-ui-vue": "0.4.1"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
32
33
|
"@types/node": "^26.6.1",
|
package/templates/api/src/app.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// ⚠️ 自动生成文件,请勿直接修改。
|
|
3
3
|
// 源:packages/api/src —— 改动请改源文件后运行 `pnpm sync:api-template`。
|
|
4
|
+
import { createRequire } from 'node:module'
|
|
4
5
|
import express from 'express'
|
|
5
6
|
import type { Express, RequestHandler } from 'express'
|
|
6
7
|
import { createHealthRouter } from './routes/health'
|
|
@@ -20,9 +21,20 @@ export interface CreateAppOptions {
|
|
|
20
21
|
cors?: boolean
|
|
21
22
|
}
|
|
22
23
|
|
|
24
|
+
/** 运行时读自己包的 package.json 版本,避免默认值随发布演进漂移(包内 dist/ 与 package.json 同级) */
|
|
25
|
+
function readOwnVersion(): string {
|
|
26
|
+
try {
|
|
27
|
+
const req = createRequire(import.meta.url)
|
|
28
|
+
const pkg = req('../package.json') as { version?: string }
|
|
29
|
+
return pkg.version ?? 'unknown'
|
|
30
|
+
} catch {
|
|
31
|
+
return 'unknown'
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
23
35
|
export const API_PREFIX = '/api'
|
|
24
36
|
export const DEFAULT_API_NAME = 'kb-api'
|
|
25
|
-
export const DEFAULT_API_VERSION =
|
|
37
|
+
export const DEFAULT_API_VERSION = readOwnVersion()
|
|
26
38
|
|
|
27
39
|
const ENDPOINTS = [
|
|
28
40
|
'GET /api/health',
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// ⚠️ 自动生成文件,请勿直接修改。
|
|
3
3
|
// 源:packages/api/src —— 改动请改源文件后运行 `pnpm sync:api-template`。
|
|
4
|
+
import { createRequire } from 'node:module'
|
|
4
5
|
import express from 'express'
|
|
5
6
|
import type { Express, RequestHandler } from 'express'
|
|
6
7
|
import { createHealthRouter } from './routes/health'
|
|
@@ -20,9 +21,20 @@ export interface CreateAppOptions {
|
|
|
20
21
|
cors?: boolean
|
|
21
22
|
}
|
|
22
23
|
|
|
24
|
+
/** 运行时读自己包的 package.json 版本,避免默认值随发布演进漂移(包内 dist/ 与 package.json 同级) */
|
|
25
|
+
function readOwnVersion(): string {
|
|
26
|
+
try {
|
|
27
|
+
const req = createRequire(import.meta.url)
|
|
28
|
+
const pkg = req('../package.json') as { version?: string }
|
|
29
|
+
return pkg.version ?? 'unknown'
|
|
30
|
+
} catch {
|
|
31
|
+
return 'unknown'
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
23
35
|
export const API_PREFIX = '/api'
|
|
24
36
|
export const DEFAULT_API_NAME = 'kb-api'
|
|
25
|
-
export const DEFAULT_API_VERSION =
|
|
37
|
+
export const DEFAULT_API_VERSION = readOwnVersion()
|
|
26
38
|
|
|
27
39
|
const ENDPOINTS = [
|
|
28
40
|
'GET /api/health',
|