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: