feat: multi-package loading with base framework support
- Add RuntimeOptions.basePackages for loading framework packages before game package - Add ScriptEngine.loadPackages() for multi-package module merging - LuaDardoScriptEngine merges modules from all packages, game overrides framework - PackageActivationController loads base packages first, then game package - GamePackageManifest parses optional 'base' field - Update docs: README, quick-start, lua-package-format, architecture - Update all test mocks with loadPackages() implementation
This commit is contained in:
@@ -68,6 +68,28 @@ Package dependency root:
|
||||
packages/flame_lua_runtime/assets/runtime/lua
|
||||
```
|
||||
|
||||
### Multi-package loading
|
||||
|
||||
The runtime supports loading multiple packages in sequence, with module merging:
|
||||
|
||||
```text
|
||||
RuntimeOptions.basePackages = ['_framework']
|
||||
-> load _framework package (modules: app, diff, ids, net, ...)
|
||||
-> load game package (modules: state, rules, main, ...)
|
||||
-> merge into flat _moduleScripts map
|
||||
-> game modules override framework modules on name collision
|
||||
-> execute game entry script
|
||||
```
|
||||
|
||||
Key classes:
|
||||
|
||||
- `RuntimeOptions.basePackages` — ordered list of framework package IDs.
|
||||
- `PackageActivationController._prepareCandidate()` — loads base packages first, then game package, passes combined list to `ScriptEngine.loadPackages()`.
|
||||
- `LuaDardoScriptEngine.loadPackages()` — iterates all packages, merges `manifest.modules` into `_moduleScripts`, executes entry from last package.
|
||||
- `GamePackageManifest.base` — optional metadata field declaring framework dependency.
|
||||
|
||||
Module resolution is flat: `runtime.import("xxx")` looks up `_moduleScripts[xxx]`. Game modules and framework modules share the same namespace. Later-loaded packages win on collision.
|
||||
|
||||
## Safety model
|
||||
|
||||
- Lua module loading is manifest-declared.
|
||||
|
||||
Reference in New Issue
Block a user