LegacyScriptEngine icon indicating copy to clipboard operation
LegacyScriptEngine copied to clipboard

[Bug]: 加载插件出现错误时不会提示

Open zimuya4153 opened this issue 10 months ago • 8 comments

Describe the bug

插件在加载时,如果出现错误,不会有任何的报错,并且还会显示已加载

Image

Image

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

zimuya4153 avatar Feb 15 '25 18:02 zimuya4153

似乎和 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可以的情况

ShrBox avatar Mar 14 '25 12:03 ShrBox

打算咋处理

zimuya4153 avatar Mar 14 '25 14:03 zimuya4153

打算咋处理

可能没法处理,会破坏插件兼容性

ShrBox avatar Mar 14 '25 14:03 ShrBox

那就输出一下报错?至少让开发者知道具体报错是啥

zimuya4153 avatar Mar 14 '25 14:03 zimuya4153

那就输出一下报错?至少让开发者知道具体报错是啥

ShrBox avatar Mar 14 '25 14:03 ShrBox

怪了,往catch里面加了ll::error_utils::printException也不会输出异常,疑似是压根没有捕获到

ShrBox avatar Mar 14 '25 14:03 ShrBox

那就输出一下报错?至少让开发者知道具体报错是啥

暂时可以通过空入口文件动态导入来把异常延迟到运行中,靠插件自己捕获 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() {
  // ...
}

xiaoqch avatar Mar 14 '25 15:03 xiaoqch

https://github.com/LiteLDev/ScriptX/pull/12 这个pr修了,但是还有一些相关问题,

  • loadFile和eval都失败时,只会提示eval的错误,这对包含es导入语法的插件很不友好

Image

  • 现在的兼容方案存在问题,loadFile 抛出错误之前可能插件已经进行了一些处理,而 eval 时会再进行一遍

Image

xiaoqch avatar Mar 15 '25 05:03 xiaoqch