gpt4 book ai didi

javascript - 是否可以只将 dart 函数转换为 javascript

转载 作者:行者123 更新时间:2023-12-05 08:10:38 31 4
gpt4 key购买 nike

我目前正在使用以下 package自述文件说明了以下内容

final bool loaded = await JsIsolatedWorker().importScripts(['test.js']);

我正在使用 isolate worker 包,因此我的代码可以在网络上和网络外运行。我想从我的 Dart 代码生成 javascript 代码。我有一个具有顶级功能的文件,我使用

dart compile js -O0 -o test.js test.dart

我在这里找到的

https://dart.dev/tools/dart2js

这是我的 Dart 文件

void main(List<String> args) {
doComputation('');
}

String doComputation(String input) {
return 'output';
}

只有当我有一个 main 函数时,我才能生成 javascript,但这会生成一个 javascript 文件,其中 doComutation 不是顶级函数,所以我不确定包是否可以调用该函数。看起来它生成了一个完整的程序,而不是仅仅生成一个函数。

生成的文件太长,无法发布

所以我的问题归结为这个。有没有一种方法可以从 dart for 1 函数生成 javascript 并包含其依赖项,而不必生成整个程序?这样我就可以从 dart 调用这个函数。

最佳答案

我不是专家,但我也遇到过这个问题。这是对我有用的:

在 web_worker.dart 中:

import 'package:js/js.dart';

main(){
allowInterop(doComputation);
}

@JS('doComputation')
String doComputation(String computationInput) {
// Replace this with your actual computation.
final String computationOutput = "output";
return computationOutput;
}

编译使用:

$ dart compile js web_worker.dart -o webWorker.js

手动编辑编译器生成的js文件webWorker.js:

删除文件顶部的这一行:

(function dartProgram() {

以及文件底部带有相应右括号的行:

})();

我不明白这里发生了什么,但我发现 webWorker.js 中定义的函数 doComputation() 的 Javascript 版本作为对象“A”的属性。

我在文件的顶部定义了一个包装器,如下所示:

function doComputation(computationInput) {
return A.doComputation(computationInput)
}

然后我可以像这样将文件与 JsIsolatedWorker 一起使用:

final bool loaded =
await JsIsolatedWorker().importScripts(['../web/webWorker.js']);
if (loaded) {
final String computationResult = await JsIsolatedWorker()
.run(functionName: 'doComputation', arguments: computationInput);
} else {
debugPrint('Web worker is not available');
}

如果更了解这一点的人可以详细说明或改进此解决方案,那就太好了。我真的不知道我在做什么。我发布这篇文章只是希望通过分享对我有用的方法来帮助其他人在未来节省时间。

关于javascript - 是否可以只将 dart 函数转换为 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72495706/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com