From f28e39e0b309e1dc6834ecca3a665476e3b760fc Mon Sep 17 00:00:00 2001 From: yumoqing Date: Sat, 22 Aug 2026 16:40:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BA=94=E7=94=A8=E8=A7=84=E8=8C=83?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=A8=A1=E5=9D=97=E5=AE=8C=E6=95=B4=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E6=B8=85=E5=8D=95(build.sh=20=E4=B8=80=E9=94=AE?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=208=20=E6=AD=A5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git pull + pip install + wwwroot 软链 + i18n 合并 + json2ddl 建表 + xls2ui CRUD + init_data 初始化数据 + load_module 挂载 --- skills_library/all/web-application-spec/SKILL.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/skills_library/all/web-application-spec/SKILL.md b/skills_library/all/web-application-spec/SKILL.md index a59fd46..e658341 100644 --- a/skills_library/all/web-application-spec/SKILL.md +++ b/skills_library/all/web-application-spec/SKILL.md @@ -89,7 +89,18 @@ if __name__ == '__main__': webapp(init) ``` -> **业务模块如何导入到应用(关键)**:一个应用 = 一个入口(`app/${appname}.py`)= 一个端口。业务模块(organization/payroll/recruitment/...)是 Python 包,通过各自的 `load_{module}()` 在 `init()` 里逐个加载,**挂在应用这个唯一入口下**。不要给每个模块单独建 `app.py`、单独占端口、单独起服务——模块不是独立部署单元,应用才是。 +> **应用对模块的完整导入(关键,build.sh 一键部署必须覆盖)**:一个应用 = 一个入口(`app/${appname}.py`)= 一个端口。业务模块(organization/payroll/recruitment/...)是 Python 包,不是独立服务。应用通过 build.sh 把各模块完整集成进来,步骤如下: +> +> 1. **代码导入(git pull)**:模块从 git clone 到 `pkgs/{模块名}/`(基础包 apppublic/sqlor/ahserver/rbac/xls2ddl/appbase/bricks 同)。禁止手动复制源码。 +> 2. **依赖安装(pip install)**:`pip install -e pkgs/{模块名}`(或 `pip install`)安装所有模块;无 pyproject.toml 的用 PYTHONPATH。 +> 3. **前端链接(wwwroot 软链)**:`ln -sf ../pkgs/{模块名}/wwwroot wwwroot/{模块名}`(软链接非 cp,保持同步)。 +> 4. **i18n 导入**:merge_i18n.py 合并各模块 `i18n/{zh,en}/msg.txt` → `wwwroot/i18n/{lang}/i18n.json`(i18n_getmsgs.dspy 供 bricks.js 读取)。 +> 5. **建表(DDL)**:json2ddl 从模块 `models/*.json` 生成 `mysql.ddl.sql`,执行建表。 +> 6. **CRUD 生成**:xls2ui 从模块 `json/*.json` 生成 CRUD(.dspy + .ui)。 +> 7. **初始化数据**:`python scripts/init_data.py` 导入模块 `init/data.json`(appcodes 等种子数据)。 +> 8. **运行挂载(load_{module}())**:应用 `app/{appname}.py` 的 `init()` 里逐个 `load_{module}()`(见上)。 +> +> 不要给每个模块单独建 `app.py`、单独占端口、单独起服务——模块不是独立部署单元,应用才是。以上 8 步是应用一键部署正确执行的完整清单,缺一不可。 ### conf/config.json (Configuration) Must include the following sections: