[Bug]: 加载插件出现错误时不会提示
Describe the bug
插件在加载时,如果出现错误,不会有任何的报错,并且还会显示已加载
To Reproduce
创建一个js插件,往其中写入以下内容,插件仅输出a并且没有任何报错则复现完成
logger.warn("a")
throw new Error("Test");
logger.warn("b");
Expected behavior
如果加载插件时出现错误,应该输出错误内容并停止加载
Screenshots
No response
Platform
Windows 10
BDS Version
Windows
LeviLamina Version
1.0.1
LegacyScriptEngine Version
0.9.7
Additional context
No response
似乎和 https://github.com/LiteLDev/LegacyScriptEngine/blob/feaa6dfb1fb765e70ca2c6d887e06e6381e7a420/src/lse/PluginManager.cpp#L201https://github.com/LiteLDev/LegacyScriptEngine/blob/feaa6dfb1fb765e70ca2c6d887e06e6381e7a420/src/lse/PluginManager.cpp#L201 有关,这块主要是在loadFile失败后改用eval再次加载插件,部分插件会出现使用loadFile失败,而eval可以的情况
打算咋处理
打算咋处理
可能没法处理,会破坏插件兼容性
那就输出一下报错?至少让开发者知道具体报错是啥
那就输出一下报错?至少让开发者知道具体报错是啥
⭐
怪了,往catch里面加了ll::error_utils::printException也不会输出异常,疑似是压根没有捕获到
那就输出一下报错?至少让开发者知道具体报错是啥
暂时可以通过空入口文件动态导入来把异常延迟到运行中,靠插件自己捕获
example.js (入口文件,只留插件注册和动态导入)
mc.listen("onServerStarted", () => {
import("./plugins/example/main.js")
.then(({ default: main }) => {
main();
})
.catch((error) => {
logger.error(error);
});
});
main.js 实际导入和处理逻辑
export default function main() {
// ...
}
https://github.com/LiteLDev/ScriptX/pull/12 这个pr修了,但是还有一些相关问题,
- loadFile和eval都失败时,只会提示eval的错误,这对包含es导入语法的插件很不友好
- 现在的兼容方案存在问题,loadFile 抛出错误之前可能插件已经进行了一些处理,而 eval 时会再进行一遍