【问题标题】:Is it possible to only convert a dart function to javascript是否可以只将 dart 函数转换为 javascript
【发布时间】:2022-06-14 02:55:24
【问题描述】:

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

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

我正在使用隔离工作包,因此我的代码可以在 Web 和 Web 之外运行。我想从我的飞镖代码生成 javascript 代码。我有一个具有顶级功能的文件,我使用

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

我在这里找到的

https://dart.dev/tools/dart2js

这是我的飞镖文件

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

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

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

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

【问题讨论】:

    标签: javascript dart dart-isolates dart2js


    【解决方案1】:

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

    @JS()
    library callable_function;
    
    import 'package:js/js.dart';
    
    /// Allows assigning a function to be callable from `window.functionName()`
    @JS('functionName')
    external set _functionName(void Function() f);
    
    /// Allows calling the assigned function from Dart as well.
    @JS()
    external void functionName();
    
    void _someDartFunction() {
      print('Hello from Dart!');
    }
    
    void main() {
      _functionName = allowInterop(_someDartFunction);
    }
    

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

    查看 google chartjs https://github.com/google/chartjs.dart/tree/master/example 获取完整示例。

    来自 dart2js "Helping dart2js generate better code" 有一个提示:

    不必担心应用所包含库的大小。 dart2js 编译器执行摇树以省略未使用的类、函数、方法等。只需导入你需要的库,让 dart2js 摆脱你不需要的。

    与此帖子相关https://stackoverflow.com/a/21124252/3733730

    【讨论】:

      【解决方案2】:

      您可以通过使用包 dart2js 来做到这一点

      为你的 main.dart dart2js 编写一个程序,你想创建的函数或命令在那里,然后创建一个单独的 dart 文件,你想调用什么函数,它会解决你的问题,它是一个单独的文件但只会执行您需要这样做的一个功能,那就是单独的文件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-18
        • 2015-03-14
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        相关资源
        最近更新 更多