Skip to content

Commit 6addb25

Browse files
CodeCasterXclaude
andauthored
[fit-launcher] 使用 Node.js 重写启动脚本,实现真正的跨平台支持 (#366)
* [fit-launcher] 使用 Node.js 重写启动脚本,实现真正的跨平台支持 主要改进: 1. 启动脚本重构 - 使用 Node.js 重写核心启动逻辑 (fit.js) - Unix/Linux/macOS 使用 fit 脚本(Node.js 实现) - Windows 使用 fit.cmd 批处理文件 - 移除旧的 fit.bat 文件 2. 跨平台兼容性 - 解决 Bash 脚本在不同系统上的兼容性问题 - 避免 macOS 上 readlink -f 不可用的问题 - 统一 Windows/Linux/macOS 的使用体验 3. 功能增强 - 改进错误处理和错误信息输出 - 正确处理进程信号 (SIGINT/SIGTERM) - 更清晰的参数解析逻辑 - 更好的代码可维护性 4. 文档更新 - 重构模块 README,从模块级别进行说明 - 添加架构设计、启动流程等技术文档 - 完善使用说明和故障排除指南 技术栈:Node.js 12+ 命令接口保持完全兼容,无需修改现有文档和脚本 * [project-config] 添加 Claude Code 项目规则配置 添加项目级别的开发规范和自动化规则: 1. 文件权限管理规则 - 动态获取文件所有者信息,避免硬编码用户名 - 从 pom.xml 等参考文件自动获取权限设置 - 支持跨协作者使用,提高团队协作便利性 2. Pull Request 提交规范 - 自动读取 .github/PULL_REQUEST_TEMPLATE.md - 确保 PR 描述符合项目规范 - 简化 PR 创建流程 配置文件位置:.claude/project-rules.md 适用范围:所有使用 Claude Code 的项目协作者 * [fit-launcher] 添加 fit init 脚手架命令 新增功能: 1. 脚手架命令 (fit init) - 支持快速创建 FIT 项目结构 - 交互式输入项目信息 - 命令行参数模式支持 - 自动生成标准项目结构 2. 项目模板生成 - pom.xml(包含 FIT 依赖配置) - Application.java(启动类) - HelloController.java(示例控制器) - Message.java(示例领域模型) - README.md(项目文档) - .gitignore(版本控制忽略文件) 3. 命令参数 - --group-id: 指定 Maven Group ID - --artifact-id: 指定 Maven Artifact ID - --package: 指定 Java 包名 - 支持交互式和非交互式两种模式 4. 文档更新 - README 中添加 init 命令使用说明 - 包含详细的使用示例和参数说明 使用示例: ./fit init my-app ./fit init my-app --group-id=com.mycompany --artifact-id=my-app 脚手架功能降低了 FIT 项目的上手难度,提高开发效率 * [fit-launcher] 重构 init 命令支持 Service/Plugin 分离架构和交互式引导 - 支持创建独立的 Service (SPI) 和 Plugin 项目,符合 FIT 框架的插件架构规范 - 将模板代码从 fit.js 中分离到独立的 .tpl 文件,提高可维护性 - 新增交互式引导模式,所有参数均有合理默认值,用户可直接回车使用 - 保持向后兼容,支持命令行参数方式用于自动化场景 - Service 项目使用 build-service goal,Plugin 项目使用 build-plugin 和 package-plugin goals - Plugin 项目自动依赖对应的 Service 项目 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> --------- Co-authored-by: Claude <[email protected]>
1 parent 8186b7d commit 6addb25

File tree

14 files changed

+1421
-85
lines changed

14 files changed

+1421
-85
lines changed

.claude/project-rules.md

Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
# FIT Framework 项目规则
2+
3+
## 文件权限管理规则
4+
5+
### 规则 1: 新增和修改文件的所有权
6+
7+
**重要:** 所有新增或修改的文件必须设置正确的所有者权限,确保用户可以自主修改。
8+
9+
**原则:** 不要硬编码用户名和用户组,而是从项目中已有文件动态获取权限信息。
10+
11+
**动态获取权限的方法:**
12+
13+
```bash
14+
# 方法1: 从项目根目录的 pom.xml 获取所有者
15+
REF_FILE="pom.xml" # 或其他稳定存在的文件
16+
OWNER=$(ls -l $REF_FILE | awk '{print $3}')
17+
GROUP=$(ls -l $REF_FILE | awk '{print $4}')
18+
19+
# 方法2: 获取当前工作目录的所有者
20+
OWNER=$(ls -ld . | awk '{print $3}')
21+
GROUP=$(ls -ld . | awk '{print $4}')
22+
23+
# 方法3: 使用 stat 命令(更可靠)
24+
OWNER=$(stat -f "%Su" $REF_FILE) # macOS
25+
GROUP=$(stat -f "%Sg" $REF_FILE) # macOS
26+
#
27+
OWNER=$(stat -c "%U" $REF_FILE) # Linux
28+
GROUP=$(stat -c "%G" $REF_FILE) # Linux
29+
```
30+
31+
**实施方法:**
32+
33+
```bash
34+
# 1. 先获取参考文件的所有者
35+
OWNER_GROUP=$(ls -l pom.xml | awk '{print $3":"$4}')
36+
37+
# 2. 应用到新文件
38+
sudo chown $OWNER_GROUP <file_path>
39+
40+
# 或者分步执行
41+
OWNER=$(ls -l pom.xml | awk '{print $3}')
42+
GROUP=$(ls -l pom.xml | awk '{print $4}')
43+
sudo chown $OWNER:$GROUP <file_path>
44+
```
45+
46+
**检查清单:**
47+
- [ ] 使用 Write 工具创建新文件后,立即从已有文件获取权限并设置
48+
- [ ] 使用 Edit 工具修改文件时,确认文件所有者与项目其他文件一致
49+
- [ ] 批量创建文件后,统一修改所有权
50+
- [ ] 创建目录后,递归修改目录及其内容的所有权
51+
52+
**完整示例:**
53+
54+
```bash
55+
# ❌ 错误做法:硬编码用户信息
56+
Write(file_path, content)
57+
Bash("sudo chown jiyujie:staff " + file_path) # 在其他人电脑上会失败
58+
59+
# ✅ 正确做法:动态获取权限
60+
Write(file_path, content)
61+
# 从项目根目录的 pom.xml 获取所有者信息
62+
Bash("OWNER_GROUP=$(ls -l pom.xml | awk '{print $3\":\"$4}') && sudo chown $OWNER_GROUP " + file_path)
63+
64+
# ✅ 更简洁的做法:批量处理
65+
Write(file1, content1)
66+
Write(file2, content2)
67+
Write(file3, content3)
68+
Bash("OWNER_GROUP=$(ls -l pom.xml | awk '{print $3\":\"$4}') && sudo chown $OWNER_GROUP file1 file2 file3")
69+
```
70+
71+
## Pull Request 提交规范
72+
73+
### 规则 2: PR 提交必须遵循项目规范
74+
75+
本项目的 PR 规范定义在 `.github/PULL_REQUEST_TEMPLATE.md` 文件中。
76+
77+
**强制要求:**
78+
1. 创建 PR 前,必须先阅读 `.github/PULL_REQUEST_TEMPLATE.md`
79+
2. PR 描述必须完整填写模板中的所有必填项
80+
3. 不需要每次让用户提醒查看 PR 模板
81+
82+
**PR 模板位置:**
83+
```
84+
.github/PULL_REQUEST_TEMPLATE.md
85+
```
86+
87+
**必填项清单:**
88+
89+
1. **相关问题 / Related Issue**
90+
- [ ] Issue 链接或说明这是微小修改
91+
92+
2. **变更类型 / Type of Change**
93+
- [ ] 选择适当的变更类型(Bug修复/新功能/破坏性变更/文档/重构/性能优化/依赖升级/功能增强/代码清理)
94+
95+
3. **变更目的 / Purpose of the Change**
96+
- [ ] 详细描述变更的目的和必要性
97+
98+
4. **主要变更 / Brief Changelog**
99+
- [ ] 列出主要的变更内容
100+
101+
5. **验证变更 / Verifying this Change**
102+
- [ ] 测试步骤
103+
- [ ] 测试覆盖情况
104+
105+
6. **贡献者检查清单 / Contributor Checklist**
106+
- [ ] 基本要求
107+
- [ ] 代码质量
108+
- [ ] 测试要求
109+
- [ ] 文档和兼容性
110+
111+
**自动化流程:**
112+
113+
当用户要求创建 PR 时:
114+
1. 自动读取 `.github/PULL_REQUEST_TEMPLATE.md`
115+
2. 根据当前变更内容填写 PR 模板
116+
3. 生成完整的 PR 描述
117+
4. 提供推送和创建 PR 的命令
118+
119+
**示例工作流:**
120+
121+
```bash
122+
# 1. 自动读取 PR 模板
123+
Read(".github/PULL_REQUEST_TEMPLATE.md")
124+
125+
# 2. 分析当前变更
126+
Bash("git diff --stat")
127+
Bash("git log -1")
128+
129+
# 3. 生成 PR 描述(根据模板)
130+
# ... 填写各个部分
131+
132+
# 4. 推送并创建 PR
133+
Bash("git push -u origin <branch>")
134+
Bash("gh pr create --base <target> --title <title> --body <description>")
135+
```
136+
137+
## 通用最佳实践
138+
139+
### 文件操作
140+
- 创建文件后立即检查并修改权限
141+
- 使用 `ls -l` 验证文件所有者
142+
- 批量操作后统一修改权限
143+
144+
### Git 操作
145+
- 提交前检查 `.github/` 目录中的规范
146+
- 遵循项目的 commit message 格式
147+
- PR 描述要完整、清晰
148+
149+
### 文档更新
150+
- 修改代码时同步更新相关文档
151+
- 确保 README 的准确性
152+
- 添加必要的使用示例
153+
154+
## 项目特定信息
155+
156+
**项目名称**: FIT Framework
157+
**主分支**: main
158+
**开发分支**: 3.5.x
159+
**仓库**: https://github.com/ModelEngine-Group/fit-framework
160+
161+
**常用命令:**
162+
163+
```bash
164+
# 编译项目
165+
mvn clean install
166+
167+
# 运行测试
168+
mvn test
169+
170+
# 启动应用
171+
./fit start
172+
173+
# 检查文件权限
174+
ls -l <file>
175+
176+
# 动态修改文件权限(从 pom.xml 获取所有者)
177+
OWNER_GROUP=$(ls -l pom.xml | awk '{print $3":"$4}')
178+
sudo chown $OWNER_GROUP <file>
179+
```
180+
181+
---
182+
183+
**最后更新**: 2025-11-08
184+
**Claude Code 版本**: 最新版

0 commit comments

Comments
 (0)