#scala #playframework #sbt
#scala #playframework #sbt
Вопрос:
Я пытаюсь добавить gulp в свое игровое приложение, я создал PlayRunHook
объект, который должен позволить мне запустить gulp
команду, но когда я это делаю, sbt run
я получаю сообщение об ошибке, в котором говорится, что не удалось найти объект. Вот мой перехват:
package hooks
object Gulp extends CommandHook {
override def beforeStarted(): Unit = {
exec("gulp")
}
}
А затем в build.sbt
:
lazy val root = (project in file(".")).enablePlugins(PlayScala)
scalaVersion := "2.11.7"
scalacOptions = Seq("-deprecation")
libraryDependencies = Seq(
"junit" % "junit" % "4.10" % "test",
"org.reactivemongo" %% "play2-reactivemongo" % "0.11.14",
"com.typesafe.play" %% "play" % "2.5.0",
"com.typesafe.play" %% "play-netty-server" % "2.5.0"
)
PlayKeys.playRunHooks = hooks.Gulp()
Но я получаю:
build.sbt:18: error: not found: value hooks
PlayKeys.playRunHooks = hooks.Gulp()
Комментарии:
1. Это было полезно, но не то, как я решил свою проблему, я использовал
taskKey
вместо этого. Я принимаю ваш ответ, поскольку он отвечает на вопрос о том, почему build.sbt не может найти значениеhooks
(код должен быть вproject/
)
Ответ №1:
Вы должны создать Gulp object
в project/
каталоге, как показано ниже:
import play.sbt.PlayRunHook
import sbt._
object Gulp {
def apply(base: File): PlayRunHook = {
object GulpProcess extends PlayRunHook {
override def beforeStarted(): Unit = {
Process("gulp", base).run
}
}
GulpProcess
}
}
Затем в вашем build.sbt
:
PlayKeys.playRunHooks = Gulp(baseDirectory.value)
Для получения более подробной информации ознакомьтесь с этим руководством.
Ответ №2:
Редактировать: В конце концов, я действительно выбрал принятый ответ, этот альтернативный ответ будет запускать вашу gulp bundle
команду каждый раз, когда делается запрос к вашему приложению. Используя PlayRunHook
подход, вы получаете разные хуки жизненного цикла для подключения, и в конце концов я подключился к beforeStarted
(как это сделано в принятом ответе) для запуска gulp watch
при запуске приложения.
В дальнейшем я могу изменить это, чтобы это делалось gulp watch
в процессе разработки и gulp build
при развертывании, хотя я еще не нахожусь на этой стадии.
Принятый ответ объясняет, почему build.sbt
не удается найти значение hooks
(код должен быть в каталоге project/
), однако, чтобы решить мою проблему с желанием запускаться gulp bundle
во время компиляции, я выбрал это решение:
import sbt._
// ...
lazy val gulp = taskKey[Unit]("Build frontend assets")
gulp := {
println("gulp bundle" !!)
}
compile in Compile <<= (compile in Compile).dependsOn(gulp)