Скомпилируйте класс или функцию в Javascript - PullRequest
2 голосов
/ 19 июня 2019

Я хочу отправить код Javascript по сети и не хочу использовать для этого полный компилятор ScalaJS.Давайте предположим этот сценарий в бэкэнде:

У меня есть служба, которая хочет определить некоторые проверки для текстового поля во внешнем интерфейсе.Мой веб-интерфейс написан на Javascript и получает функцию Javascript из бэкэнда в формате json и использует ее для проверки.

Я хочу написать эту функцию в Scala в своем бэкэнде и скомпилировать ее в JS с помощью ScalaJS и поместить еев 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)

1 Ответ

1 голос
/ 20 июня 2019

Боюсь, ты не сможешь этого сделать.Scala.js предназначен для компиляции целых путей к классам JavaScript.Вы не можете скомпилировать только одну функцию.Основная причина в том, что он сохраняет всю семантику Scala, включая реализацию коллекций, строк и т. Д.

Конечно, теоретически вы можете скомпилировать каждую такую ​​функцию как модуль, который экспортирует только одну функцию,и используйте это, но это будет way излишним, так как это принесет Scala.js "налог" на каждую функцию (минимум несколько КБ, но около 100 КБ, если вы используете что-либо из коллекций).

Ваш вариант использования был точно целью другого проекта, а именно JScala , но этот проект был прекращен.

...