【问题标题】:Compile a class or function into Javascript将类或函数编译成 Javascript
【发布时间】:2019-06-20 12:55:51
【问题描述】:

我想通过网络发送 Javascript 代码,我不想为此使用完整的 ScalaJS 编译器。让我们在后端假设这种情况:

我有一个服务想要为前端的文本框定义一些验证。我的前端是用 Javascript 编写的,并从后端以 json 格式获取 Javascript 函数并将其用于验证。

我想在后端用 Scala 编写该函数,并使用 ScalaJS 将其编译为 JS 并将其放入 json 并发送到我的前端:

def validation(input: String): Boolean = {
   input.contains("scala is cool")
}

val jsFunctionText:Json = ScalaJSMagicCompiler.compileAndOptimizeFunction(validation)

reply(jsFunctionText)

有没有办法做到这一点?如果不是,那么使用 ScalaJS 编译器编译函数或类并获取指向输出文件夹中的输出编译文件的指针的最佳途径是什么?

我宁愿在编译时这样做,但不知道是否可以安全访问生成的代码。像这样的东西会很棒:

@CompileAsJS("validation")
def validation(input: String): Boolean = {
   input.contains("scala is cool")
}

val jsFunctionText:Json = ScalaJSMagicCompiler.retrieveFromFile("validation", "output.jar")

reply(jsFunctionText)

【问题讨论】:

    标签: scala scala.js


    【解决方案1】:

    恐怕你做不到。 Scala.js 旨在将整个类路径编译为 JavaScript 模块。你不能只编译一个函数。主要原因是它保留了 Scala 的所有语义,包括集合的实现、字符串的实现等。

    当然,理论上你可以将每个这样的函数编译为一个只导出一个函数的模块,然后使用它,但那将是方式矫枉过正,因为它会带来 Scala.js “税” " 在每个函数上(最少几 KB,但如果您使用集合中的任何内容,则大约 100 KB)。

    您的用例正是另一个项目的目标,即JScala,但该项目已停止。

    【讨论】:

    • 把 ScalaJS 的“任务”放在一边(想象一下你总是可以单独发布依赖项),有什么可能的方法吗?如果一个人想开始做某事,那么最好的途径是什么?
    • 但是您不能单独发送依赖项。 Scala.js 需要一次性生成整个程序的js。您的用例的最佳前进路径是不使用 Scala.js。它只是不是该用例的解决方案,从来没有,而且可能永远不会。
    猜你喜欢
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 2016-01-11
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多