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

Mik*_*ink 5 javascript dart dart-isolates dart2js

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

final bool loaded = await JsIsolatedWorker().importScripts(['test.js']);
Run Code Online (Sandbox Code Playgroud)

我正在使用隔离工作程序包,因此我的代码可以在网络上和网络外工作。我想从我的 dart 代码生成 javascript 代码。我有一个具有顶级功能的文件,我使用

dart compile js -O0 -o test.js test.dart
Run Code Online (Sandbox Code Playgroud)

我在这里找到的

https://dart.dev/tools/dart2js

这是我的 dart 文件

void main(List<String> args) {
  doComputation('');
}
            
String doComputation(String input) {
  return 'output';
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ala*_*ana -1

您可以使用js包从 Dart 代码调用 JavaScript API,反之亦然。要使 Dart 函数可通过名称从 JavaScript 调用,请使用带有注释的 setter@JS().

\n
@JS()\nlibrary callable_function;\n\nimport \'package:js/js.dart\';\n\n/// Allows assigning a function to be callable from `window.functionName()`\n@JS(\'functionName\')\nexternal set _functionName(void Function() f);\n\n/// Allows calling the assigned function from Dart as well.\n@JS()\nexternal void functionName();\n\nvoid _someDartFunction() {\n  print(\'Hello from Dart!\');\n}\n\nvoid main() {\n  _functionName = allowInterop(_someDartFunction);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

JavaScript 代码现在可以调用functionName()window.functionName().

\n

检查谷歌chartjs https://github.com/google/chartjs.dart/tree/master/example以获得完整的示例。

\n

来自 dart2js “帮助 dart2js 生成更好的代码”中有一个提示:

\n
\n

不要担心您的应用程序\xe2\x80\x99s 包含的库的大小。dart2js 编译器执行树摇动以省略未使用的类、函数、方法等。只需导入您需要的库,然后让 dart2js 删除您不需要的\xe2\x80\x99t 的库。

\n
\n

与这篇文章相关/sf/answers/1478697671/

\n