koa3-cli 1.0.8 → 1.1.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.
package/.gitignore ADDED
@@ -0,0 +1,39 @@
1
+ # Dependencies
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+
7
+ # Environment variables
8
+ .env
9
+ .env.local
10
+ .env.*.local
11
+
12
+ # Logs
13
+ logs/
14
+ *.log
15
+
16
+ # OS
17
+ .DS_Store
18
+ Thumbs.db
19
+
20
+ # IDE
21
+ .vscode/
22
+ .idea/
23
+ *.swp
24
+ *.swo
25
+ *~
26
+
27
+ # Build
28
+ dist/
29
+ build/
30
+
31
+ # Coverage
32
+ coverage/
33
+ .nyc_output/
34
+
35
+ # Temporary files
36
+ tmp/
37
+ temp/
38
+ /release-dist/
39
+ /release-temp/
package/.npmignore ADDED
@@ -0,0 +1,46 @@
1
+ # Dependencies
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+
7
+ # Environment variables
8
+ .env
9
+ .env.local
10
+ .env.*.local
11
+
12
+ # Logs
13
+ logs/
14
+ *.log
15
+
16
+ # OS
17
+ .DS_Store
18
+ Thumbs.db
19
+
20
+ # IDE
21
+ .vscode/
22
+ .idea/
23
+ *.swp
24
+ *.swo
25
+ *~
26
+
27
+ # Build
28
+ dist/
29
+ build/
30
+
31
+ # Coverage
32
+ coverage/
33
+ .nyc_output/
34
+
35
+ # Temporary files
36
+ tmp/
37
+ temp/
38
+ release-dist/
39
+ release-temp/
40
+
41
+ # Git
42
+ .git/
43
+ .gitignore
44
+
45
+
46
+ docs/
package/CHANGELOG.md ADDED
@@ -0,0 +1,47 @@
1
+ # Changelog
2
+
3
+ 所有重要变更都会记录在这里。
4
+
5
+ 本项目遵循语义化版本思路:
6
+
7
+ - `MAJOR`:包含不兼容的 CLI、模板或运行时行为变更。
8
+ - `MINOR`:新增向后兼容的能力、模板或工程化设施。
9
+ - `PATCH`:修复问题、依赖补丁、安全修复和文档修正。
10
+
11
+ ## 1.1.0 - 2026-06-15
12
+
13
+ ### Added
14
+
15
+ - 新增 GitHub Pages 文档部署流程,使用 `public/` 目录作为静态文档源。
16
+ - 新增 GitHub Actions CI,覆盖 Node.js `20.18.1` 和 `24`。
17
+ - 新增 CLI 创建项目的自动化测试,验证版本输出、项目目录、关键文件和生成后的 `package.json`。
18
+ - 新增 CORS 配置能力,使用 `@koa/cors`,默认关闭并可通过环境变量开启。
19
+ - 新增 npm 发布白名单,控制发布包内容,避免临时目录和构建产物混入。
20
+
21
+ ### Changed
22
+
23
+ - 将主仓库地址切换为 GitHub,并在 README 首屏补充 npm、CI、License、Node.js badge。
24
+ - 重写 README 首屏定位、快速开始、能力表、分支说明和路线图。
25
+ - 将 `koa-cors` 替换为维护更明确的 `@koa/cors`。
26
+ - 升级核心依赖:`koa`、`@koa/router`、`dotenv`、`joi`。
27
+ - 修复 `package-lock.json` 与 Node.js 24 / 新版 npm 的兼容问题。
28
+
29
+ ### Fixed
30
+
31
+ - 修复 GitHub Pages 子路径部署时 CSS / JS 资源路径失效的问题。
32
+ - 修复 npm 发布包包含 `release-temp/`、`release-dist/` 的问题。
33
+ - 修复依赖安全风险,`npm audit` 当前为 0 vulnerabilities。
34
+ - 修复 `package-lock.json` 根版本和 `package.json` 版本不一致的问题。
35
+
36
+ ### Branches
37
+
38
+ - `admin` 分支已同步依赖安全治理。
39
+ - `admin` 分支服务端和客户端 audit 均已清零。
40
+ - `admin` 分支客户端升级到 Vite 8,并通过生产构建验证。
41
+
42
+ ## 1.0.9 - 2026-06-08
43
+
44
+ ### Changed
45
+
46
+ - 维护 Koa3 CLI 基础脚手架能力。
47
+ - 包含 Koa 3、MVC 分层、多环境配置、日志、参数校验、错误处理和 RESTful 示例。
package/README.md CHANGED
@@ -1,289 +1,248 @@
1
1
  # Koa3 CLI
2
2
 
3
- 基于 Koa3 的脚手架项目,提供 CLI 工具快速创建项目。
3
+ [![npm version](https://img.shields.io/npm/v/koa3-cli.svg)](https://www.npmjs.com/package/koa3-cli)
4
+ [![CI](https://github.com/hikerw/koa3-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/hikerw/koa3-cli/actions/workflows/ci.yml)
5
+ [![license](https://img.shields.io/npm/l/koa3-cli.svg)](./LICENSE)
6
+ [![node](https://img.shields.io/badge/node-%3E%3D20-339933.svg)](https://nodejs.org/)
4
7
 
5
- - 📖 文档地址:https://atwzc.cn/
6
- - 🔗 Gitee 地址:https://gitee.com/wangziwl/koa3-cli
8
+ 面向 Koa 3 的现代 Node.js API 项目脚手架。它不是只复制一个空目录,而是把后端项目常见的分层结构、环境配置、日志、错误处理、参数校验和 RESTful 示例先搭好,让你可以更快进入业务开发。
7
9
 
8
- ## 安装 CLI 工具
10
+ - 文档地址:https://hikerw.github.io/koa3-cli/
11
+ - GitHub:https://github.com/hikerw/koa3-cli
12
+ - Gitee:https://gitee.com/wangziwl/koa3-cli
13
+ - npm:https://www.npmjs.com/package/koa3-cli
14
+ - 更新日志:[CHANGELOG.md](./CHANGELOG.md)
15
+ - 发布流程:[RELEASE.md](./RELEASE.md)
9
16
 
10
- ### 全局安装(推荐)
17
+ ## 为什么选择 Koa3 CLI
11
18
 
12
- ```bash
13
- npm install -g koa3-cli
14
- ```
15
-
16
- ### 使用 npx(无需安装)
19
+ - 基于 Koa 3,适合需要轻量、清晰、可控的 Node.js API 服务。
20
+ - 内置 Controller / Service / Model 分层,避免新项目从第一天就把逻辑堆在路由里。
21
+ - 内置多环境配置,支持 `development`、`local`、`production` 差异化加载。
22
+ - 内置请求日志、错误日志和 `x-request-id`,方便定位线上问题。
23
+ - 内置 Joi 参数校验示例,校验失败统一返回 422。
24
+ - 内置全局错误处理和 404 处理,接口响应行为更一致。
25
+ - 提供 CLI,一条命令创建可运行项目。
17
26
 
18
- ```bash
19
- npx koa3-cli create my-project
20
- ```
21
-
22
- ## 使用 CLI 创建项目
27
+ ## 30 秒快速开始
23
28
 
24
29
  ```bash
25
- # 创建新项目
26
- koa3-cli create my-project
27
-
28
- # 进入项目目录
29
- cd my-project
30
-
31
- # 安装依赖
30
+ npx koa3-cli create my-api
31
+ cd my-api
32
32
  npm install
33
-
34
- # 启动开发服务器
35
33
  npm run dev
36
34
  ```
37
35
 
38
- ## 项目结构
39
-
40
- ```
41
- koa3-cli/
42
- ├── app/ # 应用代码目录
43
- │ ├── controller/ # 控制器目录
44
- │ │ ├── home.js # 首页控制器
45
- │ │ └── user.js # 用户控制器
46
- │ ├── service/ # 服务层目录
47
- │ │ └── user.js # 用户服务
48
- │ ├── model/ # 数据模型目录
49
- │ │ └── user.js # 用户模型
50
- │ ├── middleware/ # 中间件目录
51
- │ │ ├── index.js # 中间件入口
52
- │ │ ├── auth.js # 认证中间件示例
53
- │ │ ├── requestLogger.js # 请求日志中间件
54
- │ │ └── errorHandler.js # 全局错误处理
55
- │ ├── lib/ # 基础能力目录
56
- │ │ ├── logger.js # 日志工具
57
- │ │ └── validator.js # 参数校验中间件(Joi)
58
- │ ├── schema/ # 参数校验规则目录
59
- │ │ └── user.js # 用户相关校验规则
60
- │ └── router.js # 路由配置
61
- ├── config/ # 配置文件目录
62
- │ ├── config.default.js # 默认配置
63
- │ ├── config.local.js # 本地开发配置
64
- │ └── config.prod.js # 生产环境配置
65
- ├── logs/ # 日志输出目录(运行时自动创建)
66
- ├── public/ # 静态资源目录
67
- │ └── index.html # 首页
68
- ├── app.js # 应用入口文件
69
- ├── package.json # 项目配置
70
- └── README.md # 项目说明
71
- ```
72
-
73
- ## 特性
36
+ 启动后访问:
74
37
 
75
- - ✅ 基于 Koa3,轻量高效
76
- - CLI 工具,一键创建项目
77
- - ✅ 项目结构,清晰规范
78
- - ✅ 支持多环境配置(development/production)
79
- - ✅ MVC 架构(Controller/Service/Model)
80
- - ✅ 中间件支持
81
- - ✅ 统一的错误处理(校验失败返回 422,message 为第一条校验提示)
82
- - ✅ 内置日志系统(访问日志、错误日志、请求追踪)
83
- - ✅ 基于 Joi 的参数校验(body/query/params,校验结果挂到 `ctx.state.validated`)
84
- - ✅ RESTful API 示例
38
+ - 首页:http://localhost:3000
39
+ - API 示例:http://localhost:3000/api/user
40
+ - 本地文档:http://localhost:3000/index.html
85
41
 
86
- ## 快速开始
87
-
88
- ### 安装依赖
42
+ 也可以全局安装:
89
43
 
90
44
  ```bash
91
- npm install
92
- ```
45
+ npm install -g koa3-cli
46
+ koa3-cli create my-api
47
+ ```
48
+
49
+ ## 当前能力
50
+
51
+ | 能力 | 说明 |
52
+ | --- | --- |
53
+ | Koa 3 | 使用 Koa 3 作为核心 Web 框架 |
54
+ | 路由 | 使用 `@koa/router` 管理 API 路由 |
55
+ | 分层结构 | 默认拆分 `controller`、`service`、`model`、`middleware`、`lib` |
56
+ | 环境配置 | 通过 `config.default.js`、`config.local.js`、`config.prod.js` 管理环境差异 |
57
+ | 日志 | 支持控制台日志、文件日志、访问日志、错误日志 |
58
+ | 请求追踪 | 自动生成或透传 `x-request-id` |
59
+ | CORS | 使用 `@koa/cors`,默认关闭,可通过配置显式开启 |
60
+ | 参数校验 | 使用 Joi 校验 `body`、`query`、`params` |
61
+ | 错误处理 | 统一处理业务异常、校验异常和未知异常 |
62
+ | 静态资源 | 内置 `public` 静态目录和文档页 |
63
+ | 自动化测试 | 使用 `node:test` 覆盖 CLI 创建项目关键路径 |
64
+ | CI | 使用 GitHub Actions 自动运行测试和 npm 打包检查 |
93
65
 
94
- ### 启动项目
66
+ ## 项目结构
67
+
68
+ ```text
69
+ koa3-cli/
70
+ ├── app/ # 应用代码目录
71
+ │ ├── controller/ # 控制器:处理请求输入输出
72
+ │ │ ├── home.js
73
+ │ │ └── user.js
74
+ │ ├── service/ # 服务层:承载业务逻辑
75
+ │ │ └── user.js
76
+ │ ├── model/ # 模型层:描述数据结构或数据访问
77
+ │ │ └── user.js
78
+ │ ├── middleware/ # 中间件
79
+ │ │ ├── auth.js
80
+ │ │ ├── errorHandler.js
81
+ │ │ ├── index.js
82
+ │ │ ├── notFound.js
83
+ │ │ └── requestLogger.js
84
+ │ ├── lib/ # 基础工具
85
+ │ │ ├── logger.js
86
+ │ │ └── validator.js
87
+ │ ├── processEvents.js # 进程异常事件处理
88
+ │ ├── router.js # 路由入口
89
+ │ └── setup.js # 应用装配入口
90
+ ├── config/ # 多环境配置
91
+ │ ├── config.default.js
92
+ │ ├── config.local.js
93
+ │ ├── config.prod.js
94
+ │ └── loader.js
95
+ ├── public/ # 静态资源和本地文档
96
+ ├── bin/cli.js # CLI 入口
97
+ ├── app.js # 应用启动入口
98
+ ├── env.example # 环境变量示例
99
+ └── package.json
100
+ ```
101
+
102
+ ## 常用命令
95
103
 
96
- 开发环境(使用 nodemon 自动重启):
97
104
  ```bash
105
+ # 启动开发环境
98
106
  npm run dev
99
- ```
100
107
 
101
- 生产环境:
102
- ```bash
108
+ # 启动生产环境
103
109
  npm start
104
- ```
105
110
 
106
- ### 访问应用
111
+ # 查看 CLI 帮助
112
+ npx koa3-cli --help
107
113
 
108
- - 首页: http://localhost:3000
109
- - API 示例: http://localhost:3000/api/user
110
- - 文档: http://localhost:3000/index.html
114
+ # 查看 CLI 版本
115
+ npx koa3-cli --version
116
+ ```
111
117
 
112
118
  ## 环境配置
113
119
 
114
- 项目支持多环境配置,通过 `NODE_ENV` 环境变量控制:
115
-
116
- - `development` 或 `local`: 加载 `config.local.js`
117
- - `production`: 加载 `config.prod.js`
118
- - 默认: 加载 `config.default.js`
120
+ 项目通过 `NODE_ENV` 控制配置加载:
119
121
 
120
- 可以通过 `.env` 文件配置环境变量(参考 `.env.example`)。
122
+ - `development` `local`:加载 `config.local.js`
123
+ - `production`:加载 `config.prod.js`
124
+ - 其他情况:加载 `config.default.js`
121
125
 
122
- ### 日志配置
123
-
124
- 日志系统默认开启控制台和文件输出,支持 4 个级别:`debug`、`info`、`warn`、`error`。
125
-
126
- `.env` 可配置项:
126
+ 可以复制 `env.example` 为 `.env` 后按需修改:
127
127
 
128
128
  ```bash
129
+ PORT=3000
130
+ NODE_ENV=development
129
131
  LOG_LEVEL=info
130
132
  LOG_DIR=logs
131
133
  LOG_ENABLE_CONSOLE=true
132
134
  LOG_ENABLE_FILE=true
135
+ CORS_ENABLE=false
136
+ CORS_ORIGIN=*
133
137
  ```
134
138
 
135
- 运行后会在日志目录按天生成文件:
139
+ ## 日志与请求追踪
140
+
141
+ 日志系统默认支持 4 个级别:`debug`、`info`、`warn`、`error`。运行后会在日志目录按天生成文件:
136
142
 
137
- - `<date>.log`:通用应用日志
138
- - `<date>.access.log`:请求访问日志(JSON 行格式)
139
- - `<date>.error.log`:错误级别日志
143
+ - `<date>.log`:应用日志
144
+ - `<date>.access.log`:访问日志,采用 JSON 行格式
145
+ - `<date>.error.log`:错误日志
140
146
 
141
- 请求日志中间件会自动处理 `x-request-id`:
147
+ 请求日志中间件会处理 `x-request-id`:
142
148
 
143
- - 如果请求头带有 `x-request-id`,服务端会透传并写入日志
144
- - 如果没有,服务端会自动生成并在响应头返回
145
- - 出错日志会带上 `requestId`,便于串联排查
149
+ - 请求头已有 `x-request-id` 时,服务端会透传并写入日志。
150
+ - 请求头没有 `x-request-id` 时,服务端会自动生成并写入响应头。
151
+ - 错误日志会带上 `requestId`,方便串联一次请求的完整链路。
146
152
 
147
153
  ## 参数校验
148
154
 
149
- 使用 Joi 进行请求参数校验,通过 `app/lib/validator.js` 的 `validate(schemas)` 生成中间件。
155
+ 项目内置 `app/lib/validator.js`,提供两种使用方式:
150
156
 
151
- ### 使用方式
157
+ ```javascript
158
+ const { Joi, validate, validateValue } = require('../lib/validator');
159
+ ```
152
160
 
153
- 在路由中挂载校验中间件,按需校验 `body`、`query`、`params`:
161
+ ### 在路由中使用中间件
154
162
 
155
163
  ```javascript
156
- const { validate } = require('./lib/validator');
157
- const userSchema = require('./schema/user');
164
+ const { validate, Joi } = require('./lib/validator');
158
165
 
159
- // 只校验路径参数
160
- router.get('/api/user/:id', validate({ params: userSchema.idParam }), userController.detail);
166
+ const createUserBody = Joi.object({
167
+ name: Joi.string().trim().min(1).max(100).required(),
168
+ email: Joi.string().email().allow('').optional()
169
+ });
161
170
 
162
- // 只校验请求体
163
- router.post('/api/user', validate({ body: userSchema.createUserBody }), userController.create);
164
-
165
- // 同时校验 params + body
166
- router.put('/api/user/:id', validate({
167
- params: userSchema.idParam,
168
- body: userSchema.updateUserBody
169
- }), userController.update);
171
+ router.post('/api/user', validate({ body: createUserBody }), userController.create);
170
172
  ```
171
173
 
172
- 校验通过后,结果在 **`ctx.state.validated`** 中:
174
+ 校验通过后,结果会挂到 `ctx.state.validated`:
175
+
176
+ - `ctx.state.validated.body`
177
+ - `ctx.state.validated.query`
178
+ - `ctx.state.validated.params`
173
179
 
174
- - `ctx.state.validated.body`:校验后的 body
175
- - `ctx.state.validated.query`:校验后的 query
176
- - `ctx.state.validated.params`:校验后的 params
180
+ ### 在控制器中校验单个对象
177
181
 
178
- 控制器中应优先使用 `ctx.state.validated`,未走校验的路由可继续使用 `ctx.request.body` / `ctx.params`。
182
+ 当前用户示例在 `app/controller/user.js` 中使用 `validateValue()`,适合把校验规则放在控制器附近,便于小项目快速阅读和维护。
179
183
 
180
- ### 校验失败响应
184
+ ```javascript
185
+ const userData = await validateValue(createUserBodySchema, ctx.request.body);
186
+ ```
181
187
 
182
- 校验未通过时返回 **422**,`message` 为**第一条**未通过项的提示,`errors` 为全部校验项:
188
+ 校验失败时会返回 422
183
189
 
184
190
  ```json
185
191
  {
186
192
  "success": false,
187
193
  "message": "用户名为必填",
188
194
  "errors": [
189
- { "field": "name", "message": "用户名为必填" }
195
+ {
196
+ "field": "name",
197
+ "message": "用户名为必填"
198
+ }
190
199
  ]
191
200
  }
192
201
  ```
193
202
 
194
- ### 添加新的校验规则
195
-
196
- 在 `app/schema/` 下新增或修改 schema 文件,使用 Joi 定义规则(支持 `.messages()` 自定义提示),在路由中通过 `validate({ body: xxx })` 等引用即可。详见 `app/schema/user.js`。
197
-
198
203
  ## API 示例
199
204
 
200
- ### 获取用户列表
201
205
  ```bash
206
+ # 获取用户列表
202
207
  GET /api/user
203
- ```
204
208
 
205
- ### 获取用户详情
206
- ```bash
209
+ # 获取用户详情
207
210
  GET /api/user/:id
208
- ```
209
211
 
210
- ### 创建用户
211
- ```bash
212
+ # 创建用户
212
213
  POST /api/user
213
214
  Content-Type: application/json
214
215
 
215
216
  {
216
217
  "name": "张三",
217
- "email": "zhangsan@example.com"
218
+ "email": "zhangsan@example.com",
219
+ "age": 18
218
220
  }
219
- ```
220
221
 
221
- ### 更新用户
222
- ```bash
222
+ # 更新用户
223
223
  PUT /api/user/:id
224
224
  Content-Type: application/json
225
225
 
226
226
  {
227
- "name": "李四",
228
- "email": "lisi@example.com"
227
+ "name": "李四"
229
228
  }
230
- ```
231
229
 
232
- ### 删除用户
233
- ```bash
230
+ # 删除用户
234
231
  DELETE /api/user/:id
235
232
  ```
236
233
 
237
- ## 开发指南
238
-
239
- ### 添加新的控制器
240
-
241
- 1. 在 `app/controller/` 目录下创建控制器文件
242
- 2. 在 `app/router.js` 中注册路由
243
-
244
- 示例:
245
- ```javascript
246
- // app/controller/product.js
247
- class ProductController {
248
- async list(ctx) {
249
- ctx.body = await productService.getList();
250
- }
251
- }
252
- module.exports = new ProductController();
253
-
254
- // app/router.js
255
- const productController = require('./controller/product');
256
- router.get('/api/product', productController.list);
257
- ```
258
-
259
- ### 添加新的服务
260
-
261
- 在 `app/service/` 目录下创建服务文件,处理业务逻辑。
262
-
263
- ### 添加新的模型
264
-
265
- 在 `app/model/` 目录下创建模型文件,处理数据访问。
266
-
267
- ### 添加中间件
268
-
269
- 在 `app/middleware/` 目录下创建中间件文件,然后在 `app/middleware/index.js` 中引入使用。
270
-
271
- ### 添加参数校验
234
+ ## 分支说明
272
235
 
273
- 1. `app/schema/` 下定义 Joi 规则(可参考 `app/schema/user.js`)
274
- 2. `app/router.js` 中为对应路由添加 `validate({ body, query, params })` 中间件
275
- 3. 在控制器中从 `ctx.state.validated` 读取已校验数据
236
+ - `master`:稳定的 Koa 3 API 脚手架,适合作为 npm 默认模板和开源首屏展示。
237
+ - `admin`:后台管理方向的功能分支,包含登录鉴权、菜单、角色、权限、素材管理、系统配置和 Vue 管理端等能力,适合继续打磨成进阶模板。
276
238
 
277
- ## 技术栈
239
+ ## 后续路线
278
240
 
279
- - **Koa3**: Web 框架
280
- - **@koa/router**: 路由
281
- - **koa-bodyparser**: 请求体解析
282
- - **joi**: 参数校验(body/query/params)
283
- - **koa-static**: 静态资源服务
284
- - **koa-views**: 模板引擎支持
285
- - **dotenv**: 环境变量管理
241
+ - 扩展 CLI 创建项目后的启动测试和接口冒烟测试。
242
+ - 增加 TypeScript 模板。
243
+ - 将 `admin` 分支能力整理为可选模板,例如 `koa3-cli create my-api --template admin`。
244
+ - 增加 `add controller/service/route` 等代码生成命令。
286
245
 
287
246
  ## 许可证
288
247
 
289
- MIT
248
+ [MIT](./LICENSE)