快速上手
写一个能跑的模块,前后大概五分钟。完整要求见 manifest 清单 和 生命周期。
开始前的准备
| 项目 | 要求 |
|---|---|
| Python | 3.10+(与宿主运行环境一致即可) |
| 系统 | 宿主跑在 Windows 上;模块本身是纯 Python,在任意系统写都行 |
| 依赖 | 模块尽量只用标准库。确需第三方包,随模块目录一起打包(见 打包与交付) |
| 运行前提 | 模块不能独立运行,必须由宿主加载。本地验证需要一份宿主运行环境(向平台方索取) |
模块开发只需要做三件事:写一个 manifest.json,写一个继承 JadeModule 的入口文件,把目录交给宿主(或自行加密成 .jmod)。
所有跨模块行为、持久化、界面推送都走 ctx 这一个对象,宿主内部怎么实现的不用管。
1. 目录结构
modules/
└── my_module/ # 目录名建议与模块名一致
├── manifest.json # 必需:模块清单
├── main.py # 必需:入口文件(文件名由 entry 指定,默认 main)
└── ui/
└── index.html # 可选:模块自带 Web 页面把 my_module/ 整个放进宿主的 modules/ 目录就能被扫描到。加密模块是单个文件 modules/my_module.jmod,与源码目录同在 modules/ 下时加密版本优先。
2. manifest.json
{
"name": "my_module",
"version": "1.0.0",
"entry": "main",
"author": "your_name",
"description": "一句话说明这个模块做什么",
"permissions": [],
"config": {}
}字段含义见 manifest 清单。
3. 入口文件 main.py
"""my_module — 我的第一个模块"""
from jade_framework import JadeModule
class MyModule(JadeModule):
name = "my_module" # 可省略,默认取 manifest.name
version = "1.0.0" # 可省略,默认取 manifest.version
def setup(self, ctx):
"""加载后调用一次:注册处理器、订阅事件。"""
ctx.register_handler("hello", self._hello)
def on_enable(self):
self.ctx.log.info("my_module 已启用")
def on_disable(self):
self.ctx.log.info("my_module 已停用")
# ---- 业务方法 ----
def _hello(self, who: str = "world") -> str:
return f"Hello, {who}!"
MODULE = MyModule # 推荐显式指定入口类4. 怎么验证
模块由宿主加载,不能像普通脚本那样直接运行,它依赖宿主注入的 ctx。
- 把
my_module/整个放进宿主的modules/目录; - 按平台方提供的方式启动宿主;
- 在外壳左侧模块列表里找到你的模块,打开开关(启用);
- 打开页面点一下,确认能拿到返回值;右侧日志栏能看到
ctx.log的输出。
还没拿到宿主环境的时候,先把纯逻辑(解析、计算、格式化)写成不依赖 ctx 的函数,用普通 Python 脚本先测这部分。能提前挡掉大部分 bug。
5. 从别处调用它
# 其他模块中
ctx.call("my_module", "hello", "小明")// 模块页面(前端)中
const text = await jade.call("my_module", "hello", "小明");