在 dart2js 缩小和摇树期间保留方法

spi*_*ce7 5 dart dart2js

我有一些用 dart 编写的文件,我想将它们编译为 javascript 并包含在我的 Android 应用程序中运行的一些 html 文件中。

这些文件由一个 main 方法组成,然后有一个带有 3 个函数的 api 层,其他 javascript 代码将在运行时调用这些函数。非常重要的是,我尽可能少地包含 dart 的库(所以摇树是必须的),并且当摇树/缩小过程发生时,我需要确保 3 个 api 层函数不会被重命名 /优化了,因为它认为他们没有被调用?

我如何告诉 dart2js 保留某些函数的签名,而不是因为它认为它们没有被使用而将它们修剪掉?

hkk*_*hkk 3

您可以使用dart:js库的context属性,JsObject它允许您将变量和方法从 dart 公开到 JavaScript,并将由 dart2js 保留。在您的 main 方法中,只需包含context['jsMethodName'] = dartMethodName,然后在 JavaScript 中调用它。这是一个例子:

库.dart

import 'dart:js';

void main(){
  print("main called!");
  context['myMethod'] = myMethod;
}

void myMethod(){
  print("My Method Called!");
}
Run Code Online (Sandbox Code Playgroud)

索引.html

<script src="library.dart.js"></script>
<script>
  console.log(myMethod());
</script>
Run Code Online (Sandbox Code Playgroud)