koa3-cli 1.0.0 → 1.0.2

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 CHANGED
@@ -1,10 +1,40 @@
1
1
  # Koa3 CLI
2
2
 
3
- 基于 Koa3 的脚手架项目。
3
+ 基于 Koa3 的脚手架项目,提供 CLI 工具快速创建项目。
4
4
 
5
5
  - 📖 文档地址:https://atwzc.cn/
6
6
  - 🔗 Gitee 地址:https://gitee.com/wangziwl/koa3-cli
7
7
 
8
+ ## 安装 CLI 工具
9
+
10
+ ### 全局安装(推荐)
11
+
12
+ ```bash
13
+ npm install -g koa3-cli
14
+ ```
15
+
16
+ ### 使用 npx(无需安装)
17
+
18
+ ```bash
19
+ npx koa3-cli create my-project
20
+ ```
21
+
22
+ ## 使用 CLI 创建项目
23
+
24
+ ```bash
25
+ # 创建新项目
26
+ koa3-cli create my-project
27
+
28
+ # 进入项目目录
29
+ cd my-project
30
+
31
+ # 安装依赖
32
+ npm install
33
+
34
+ # 启动开发服务器
35
+ npm run dev
36
+ ```
37
+
8
38
  ## 项目结构
9
39
 
10
40
  ```
@@ -34,7 +64,8 @@ koa2-cli/
34
64
 
35
65
  ## 特性
36
66
 
37
- - ✅ 基于 Koa2,轻量高效
67
+ - ✅ 基于 Koa3,轻量高效
68
+ - ✅ CLI 工具,一键创建项目
38
69
  - ✅ 项目结构,清晰规范
39
70
  - ✅ 支持多环境配置(development/production)
40
71
  - ✅ MVC 架构(Controller/Service/Model)
package/app/router.js CHANGED
@@ -1,4 +1,4 @@
1
- const Router = require('koa-router');
1
+ const { Router } = require('@koa/router');
2
2
  const router = new Router();
3
3
 
4
4
  // 加载控制器
package/app.js CHANGED
@@ -1,8 +1,8 @@
1
1
  const Koa = require('koa');
2
- const Router = require('koa-router');
2
+ const { Router } = require('@koa/router');
3
3
  const bodyParser = require('koa-bodyparser');
4
4
  const static = require('koa-static');
5
- const views = require('koa-views');
5
+ const views = require('@ladjs/koa-views');
6
6
  const path = require('path');
7
7
  const fs = require('fs');
8
8
 
package/bin/README.md ADDED
@@ -0,0 +1,96 @@
1
+ # Koa3 CLI 使用说明
2
+
3
+ ## 安装
4
+
5
+ ### 全局安装
6
+
7
+ ```bash
8
+ npm install -g koa3-cli
9
+ ```
10
+
11
+ 安装后,可以在任何地方使用 `koa3-cli` 命令。
12
+
13
+ ### 使用 npx(无需安装)
14
+
15
+ ```bash
16
+ npx koa3-cli create my-project
17
+ ```
18
+
19
+ ## 命令
20
+
21
+ ### 创建项目
22
+
23
+ ```bash
24
+ koa3-cli create <project-name>
25
+ ```
26
+
27
+ **示例:**
28
+
29
+ ```bash
30
+ koa3-cli create my-app
31
+ ```
32
+
33
+ 这会在当前目录下创建一个名为 `my-app` 的新项目。
34
+
35
+ ### 查看帮助
36
+
37
+ ```bash
38
+ koa3-cli --help
39
+ # 或
40
+ koa3-cli help
41
+ ```
42
+
43
+ ### 查看版本
44
+
45
+ ```bash
46
+ koa3-cli --version
47
+ # 或
48
+ koa3-cli version
49
+ ```
50
+
51
+ ## 创建项目后的步骤
52
+
53
+ 1. 进入项目目录:
54
+ ```bash
55
+ cd my-app
56
+ ```
57
+
58
+ 2. 安装依赖:
59
+ ```bash
60
+ npm install
61
+ ```
62
+
63
+ 3. 启动开发服务器:
64
+ ```bash
65
+ npm run dev
66
+ ```
67
+
68
+ 4. 访问应用:
69
+ - 首页: http://localhost:3000
70
+ - API 示例: http://localhost:3000/api/user
71
+ - 文档: http://localhost:3000/index.html
72
+
73
+ ## 项目结构
74
+
75
+ 创建的项目包含以下结构:
76
+
77
+ ```
78
+ my-app/
79
+ ├── app/ # 应用代码目录
80
+ │ ├── controller/ # 控制器目录
81
+ │ ├── service/ # 服务层目录
82
+ │ ├── model/ # 数据模型目录
83
+ │ ├── middleware/ # 中间件目录
84
+ │ └── router.js # 路由配置
85
+ ├── config/ # 配置文件目录
86
+ ├── public/ # 静态资源目录
87
+ ├── app.js # 应用入口文件
88
+ ├── package.json # 项目配置
89
+ └── README.md # 项目说明
90
+ ```
91
+
92
+ ## 注意事项
93
+
94
+ - 项目名称不能包含空格和特殊字符
95
+ - 如果目录已存在,CLI 会提示错误
96
+ - 创建的项目会自动配置好所有必要的文件和目录结构
package/bin/cli.js ADDED
@@ -0,0 +1,220 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Koa3 CLI 工具
5
+ * 用于快速创建 Koa3 项目
6
+ */
7
+
8
+ const fs = require('fs');
9
+ const path = require('path');
10
+ const { execSync } = require('child_process');
11
+
12
+ // 获取命令行参数
13
+ const args = process.argv.slice(2);
14
+ const command = args[0];
15
+ const projectName = args[1];
16
+
17
+ // 显示帮助信息
18
+ function showHelp() {
19
+ console.log(`
20
+ Koa3 CLI - 快速创建 Koa3 项目脚手架
21
+
22
+ 用法:
23
+ koa3-cli create <project-name> 创建新项目
24
+
25
+ 示例:
26
+ koa3-cli create my-app
27
+
28
+ 更多信息: https://gitee.com/wangziwl/koa3-cli
29
+ `);
30
+ }
31
+
32
+ // 显示版本信息
33
+ function showVersion() {
34
+ const pkg = require('../package.json');
35
+ console.log(`koa3-cli v${pkg.version}`);
36
+ }
37
+
38
+ // 复制目录
39
+ function copyDir(src, dest) {
40
+ if (!fs.existsSync(dest)) {
41
+ fs.mkdirSync(dest, { recursive: true });
42
+ }
43
+
44
+ const entries = fs.readdirSync(src, { withFileTypes: true });
45
+
46
+ for (const entry of entries) {
47
+ const srcPath = path.join(src, entry.name);
48
+ const destPath = path.join(dest, entry.name);
49
+
50
+ if (entry.isDirectory()) {
51
+ copyDir(srcPath, destPath);
52
+ } else {
53
+ // 跳过不需要的文件
54
+ if (shouldSkipFile(entry.name)) {
55
+ continue;
56
+ }
57
+ fs.copyFileSync(srcPath, destPath);
58
+ }
59
+ }
60
+ }
61
+
62
+ // 判断是否跳过文件
63
+ function shouldSkipFile(filename) {
64
+ const skipFiles = [
65
+ 'node_modules',
66
+ '.git',
67
+ '.DS_Store',
68
+ 'package-lock.json',
69
+ '.env',
70
+ 'logs',
71
+ 'coverage',
72
+ '.nyc_output',
73
+ 'dist',
74
+ 'build',
75
+ 'tmp',
76
+ 'temp'
77
+ ];
78
+
79
+ return skipFiles.some(skip => filename.includes(skip));
80
+ }
81
+
82
+ // 更新 package.json
83
+ function updatePackageJson(projectPath, projectName) {
84
+ const packageJsonPath = path.join(projectPath, 'package.json');
85
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
86
+
87
+ packageJson.name = projectName;
88
+ packageJson.version = '1.0.0';
89
+ packageJson.description = `基于 Koa3 的 ${projectName} 项目`;
90
+
91
+ // 移除 bin 字段(如果存在)
92
+ delete packageJson.bin;
93
+
94
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
95
+ }
96
+
97
+ // 创建项目
98
+ function createProject(projectName) {
99
+ if (!projectName) {
100
+ console.error('❌ 错误: 请提供项目名称');
101
+ console.log('\n用法: koa3-cli create <project-name>');
102
+ process.exit(1);
103
+ }
104
+
105
+ const currentDir = process.cwd();
106
+ const projectPath = path.join(currentDir, projectName);
107
+
108
+ // 检查项目目录是否已存在
109
+ if (fs.existsSync(projectPath)) {
110
+ console.error(`❌ 错误: 目录 "${projectName}" 已存在`);
111
+ process.exit(1);
112
+ }
113
+
114
+ console.log(`🚀 正在创建项目: ${projectName}...\n`);
115
+
116
+ try {
117
+ // 获取模板目录(当前项目的根目录)
118
+ const templateDir = path.join(__dirname, '..');
119
+
120
+ // 创建项目目录
121
+ fs.mkdirSync(projectPath, { recursive: true });
122
+
123
+ // 复制模板文件
124
+ console.log('📁 复制项目文件...');
125
+ const filesToCopy = [
126
+ 'app',
127
+ 'config',
128
+ 'public',
129
+ 'app.js',
130
+ 'env.example',
131
+ 'README.md',
132
+ 'LICENSE',
133
+ '.gitignore',
134
+ '.npmignore'
135
+ ];
136
+
137
+ for (const file of filesToCopy) {
138
+ const srcPath = path.join(templateDir, file);
139
+ const destPath = path.join(projectPath, file);
140
+
141
+ if (!fs.existsSync(srcPath)) {
142
+ continue;
143
+ }
144
+
145
+ const stat = fs.statSync(srcPath);
146
+ if (stat.isDirectory()) {
147
+ copyDir(srcPath, destPath);
148
+ } else {
149
+ fs.copyFileSync(srcPath, destPath);
150
+ }
151
+ }
152
+
153
+ // 创建新的 package.json(不包含 bin 字段)
154
+ console.log('📝 创建 package.json...');
155
+ const templatePackageJson = require('../package.json');
156
+ const newPackageJson = {
157
+ ...templatePackageJson,
158
+ name: projectName,
159
+ version: '1.0.0',
160
+ description: `基于 Koa3 的 ${projectName} 项目`
161
+ };
162
+ delete newPackageJson.bin;
163
+
164
+ fs.writeFileSync(
165
+ path.join(projectPath, 'package.json'),
166
+ JSON.stringify(newPackageJson, null, 2) + '\n'
167
+ );
168
+
169
+ // 创建 .env 文件
170
+ console.log('⚙️ 创建环境配置文件...');
171
+ if (fs.existsSync(path.join(templateDir, 'env.example'))) {
172
+ fs.copyFileSync(
173
+ path.join(templateDir, 'env.example'),
174
+ path.join(projectPath, '.env')
175
+ );
176
+ }
177
+
178
+ console.log('\n✅ 项目创建成功!\n');
179
+ console.log('下一步:');
180
+ console.log(` cd ${projectName}`);
181
+ console.log(' npm install');
182
+ console.log(' npm run dev\n');
183
+ console.log('📖 文档: https://atwzc.cn/');
184
+ console.log('🔗 Gitee: https://gitee.com/wangziwl/koa3-cli\n');
185
+
186
+ } catch (error) {
187
+ console.error('❌ 创建项目时出错:', error.message);
188
+
189
+ // 清理已创建的目录
190
+ if (fs.existsSync(projectPath)) {
191
+ fs.rmSync(projectPath, { recursive: true, force: true });
192
+ }
193
+
194
+ process.exit(1);
195
+ }
196
+ }
197
+
198
+ // 主函数
199
+ function main() {
200
+ if (!command || command === 'help' || command === '-h' || command === '--help') {
201
+ showHelp();
202
+ return;
203
+ }
204
+
205
+ if (command === 'version' || command === '-v' || command === '--version') {
206
+ showVersion();
207
+ return;
208
+ }
209
+
210
+ if (command === 'create') {
211
+ createProject(projectName);
212
+ } else {
213
+ console.error(`❌ 未知命令: ${command}`);
214
+ console.log('\n使用 koa3-cli --help 查看帮助信息');
215
+ process.exit(1);
216
+ }
217
+ }
218
+
219
+ // 运行主函数
220
+ main();
package/package.json CHANGED
@@ -1,8 +1,12 @@
1
1
  {
2
2
  "name": "koa3-cli",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Koa3脚手架",
5
5
  "main": "app.js",
6
+ "bin": {
7
+ "koa3-cli": "./bin/cli.js"
8
+ },
9
+ "preferGlobal": true,
6
10
  "scripts": {
7
11
  "start": "node app.js",
8
12
  "dev": "nodemon app.js",
@@ -21,14 +25,14 @@
21
25
  "homepage": "https://atwzc.cn/",
22
26
  "license": "MIT",
23
27
  "dependencies": {
28
+ "@koa/router": "^15.2.0",
29
+ "@ladjs/koa-views": "^9.0.0",
30
+ "dotenv": "^17.2.3",
31
+ "ejs": "^3.1.10",
24
32
  "koa": "^3.1.1",
25
- "koa-router": "^12.0.0",
26
33
  "koa-bodyparser": "^4.4.1",
27
- "koa-static": "^5.0.0",
28
- "koa-views": "^8.0.0",
29
34
  "koa-cors": "^0.0.16",
30
- "dotenv": "^17.2.3",
31
- "ejs": "^3.1.10"
35
+ "koa-static": "^5.0.0"
32
36
  },
33
37
  "devDependencies": {
34
38
  "nodemon": "^3.1.11"
package/public/index.html CHANGED
@@ -69,6 +69,10 @@
69
69
  <h3>✅ 错误处理</h3>
70
70
  <p>统一的错误处理机制</p>
71
71
  </div>
72
+ <div class="feature">
73
+ <h3>⚡ CLI 工具</h3>
74
+ <p>一键创建项目,快速上手</p>
75
+ </div>
72
76
  </div>
73
77
  </div>
74
78
  </div>
@@ -76,7 +80,19 @@
76
80
  <!-- 快速开始 -->
77
81
  <div id="getting-started" class="content-section">
78
82
  <h1>快速开始</h1>
79
- <h2>安装依赖</h2>
83
+ <h2>使用 CLI 工具创建项目(推荐)</h2>
84
+ <h3>全局安装 CLI</h3>
85
+ <pre><code class="language-bash">npm install -g koa3-cli</code></pre>
86
+ <h3>创建新项目</h3>
87
+ <pre><code class="language-bash">koa3-cli create my-project
88
+ cd my-project
89
+ npm install
90
+ npm run dev</code></pre>
91
+ <p>或者使用 npx(无需安装):</p>
92
+ <pre><code class="language-bash">npx koa3-cli create my-project</code></pre>
93
+ <h2>手动安装项目</h2>
94
+ <p>如果你已经有一个项目,可以手动安装依赖:</p>
95
+ <h3>安装依赖</h3>
80
96
  <pre><code class="language-bash">npm install</code></pre>
81
97
  <h2>启动项目</h2>
82
98
  <h3>开发环境</h3>
@@ -91,6 +107,13 @@
91
107
  <li><strong>API 示例</strong>: http://localhost:3000/api/user</li>
92
108
  <li><strong>文档</strong>: http://localhost:3000/index.html</li>
93
109
  </ul>
110
+ <h2>CLI 命令</h2>
111
+ <p>CLI 工具支持以下命令:</p>
112
+ <ul>
113
+ <li><code>koa3-cli create &lt;project-name&gt;</code> - 创建新项目</li>
114
+ <li><code>koa3-cli --help</code> - 查看帮助信息</li>
115
+ <li><code>koa3-cli --version</code> - 查看版本信息</li>
116
+ </ul>
94
117
  <h2>环境配置</h2>
95
118
  <p>项目支持多环境配置,通过 <code>NODE_ENV</code> 环境变量控制:</p>
96
119
  <ul>
@@ -114,8 +137,7 @@
114
137
  ├── app/ # 应用代码目录
115
138
  │ ├── controller/ # 控制器目录
116
139
  │ │ ├── home.js # 首页控制器
117
- │ │ ├── user.js # 用户控制器
118
- │ │ └── docs.js # 文档控制器
140
+ │ │ └── user.js # 用户控制器
119
141
  │ ├── service/ # 服务层目录
120
142
  │ │ └── user.js # 用户服务
121
143
  │ ├── model/ # 数据模型目录
@@ -126,14 +148,18 @@
126
148
  │ ├── router.js # 路由配置
127
149
  │ └── view/ # 视图模板目录(可选)
128
150
  │ └── docs.ejs # 页面模板
151
+ ├── bin/ # CLI 工具目录(仅 CLI 包)
152
+ │ └── cli.js # CLI 入口文件
129
153
  ├── config/ # 配置文件目录
130
154
  │ ├── config.default.js # 默认配置
131
155
  │ ├── config.local.js # 本地开发配置
132
156
  │ └── config.prod.js # 生产环境配置
133
157
  ├── public/ # 静态资源目录
134
- └── index.html # 首页
158
+ ├── docs/ # 文档资源
159
+ │ └── index.html # 文档首页
135
160
  ├── app.js # 应用入口文件
136
161
  ├── package.json # 项目配置
162
+ ├── env.example # 环境变量示例
137
163
  └── README.md # 项目说明</code></pre>
138
164
  <h2>目录说明</h2>
139
165
  <h3>app/</h3>
Binary file