2016-05-11 2 views
0

У меня есть проект Scala.js с файлом index.html. В настоящее время я использую структуру, как в Scala.js example, с двумя различными index.html файлами для fullOptJS и fastOptJS. Однако я хотел бы как-то СУХОЙ.Сгенерировать HTML-файлы в sbt

Я думаю, что должно быть возможно сгенерировать как index.html, так и index-fastopt.html из общего шаблона источника, используя простой код Scala, выполняющий замену переменных частей. Возможно, можно было бы это сделать, используя Generating sources and resources, но я не уверен, как это сделать.

ответ

2

Я проверил проект примера scala.js и немного изменил его.

Во-первых, редактировать index.html и заменить следующие строки:

<script type="text/javascript" src="./target/scala-2.11/example-opt.js"></script> 
<script type="text/javascript" src="./target/scala-2.11/example-launcher.js"></script> 

с:

<script type="text/javascript" src="{{example.js}}"></script> 
<script type="text/javascript" src="example-launcher.js"></script> 

Далее добавьте следующие строки в build.sbt:

def generateIndexTask(suffix: String) = Def.task { 
    val source = baseDirectory.value/"index.html" 
    val target = (crossTarget in Compile).value/"index.html" 
    val log = streams.value.log 
    IO.writeLines(target, 
    IO.readLines(source).map { 
     line => line.replace("{{example.js}}", s"example-$suffix.js") 
    } 
) 

    log.info(s"generate with suffix: $suffix") 
} 

(fastOptJS in Compile) <<= (fastOptJS in Compile).dependsOn(generateIndexTask("fastopt")) 
(fullOptJS in Compile) <<= (fullOptJS in Compile).dependsOn(generateIndexTask("opt")) 

Сформированный index.html будет располагаться в месте образца в виде файлов генерации .js: ./target/scala-2.11

Возможно, вы должны настроить пути к файлу для своего использования.

Для моих собственных проектов я использую другую структуру с проектом sbt-web на верхнем уровне для управления всеми активами и кодом scala-js в подпроекте, который экспортирует его код как webjar. Это более гибко.

+0

Работайте отлично. Однако имя выходного файла index.html должно быть разным для быстрого/полного Opt. – Suma

+1

Для этого просто замените в целевом значении: '' index.html "' с 's" index- $ suffix.html "'. Для моего личного вкуса я предпочитаю всегда загружать один и тот же файл и позволять системе сборки обрабатывать правильное поколение. –

Смежные вопросы