用babel转换器配置Sbt for Play

时间:2016-08-31 01:14:25

标签: playframework sbt babel

我花了很多时间试图解决一个接一个的问题。我最终遇到了无限循环转换的问题。我觉得我接近解决方案,但我有一些缺失的块。

当我运行activator时,转换器会生成新的main.js,系统会检测到新的更改。所以它运行另一个变化。它无止境地一次又一次地发生。

这是我的build.sbt:

name := """angular-seed-play-java"""
version := "1.0-SNAPSHOT"

lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayEbean, SbtWeb)

JsEngineKeys.engineType := JsEngineKeys.EngineType.Node
scalaVersion := "2.10.5"

libraryDependencies ++= Seq(
  "mysql" % "mysql-connector-java" % "6.0.3",
  "org.webjars" % "angularjs" % "1.3.0-beta.2",
  "org.webjars.npm" % "systemjs" % "0.19.36",
  "org.webjars" % "jquery" % "3.1.0"
)

routesGenerator := InjectedRoutesGenerator

val browserifyOutputDir = settingKey[File]("Browserify output directory")
browserifyOutputDir := baseDirectory.value / "public" / "js"

excludeFilter in (Assets, JshintKeys.jshint) := "*.js"

sourceGenerators in Assets += task[Seq[File]] {
  val outputFile = browserifyOutputDir.value / "main.js"
  "browserify -t [ babelify --presets [ latest ] ] " + baseDirectory.value + "/public/js/main.jsx -o "+outputFile.getPath !;
  List(outputFile)
}

pipelineStages := Seq(rjs, digest, gzip)

我添加了

excludeFilter in (Assets, JshintKeys.jshint) := "*.js"

行以防止默认的transpiler runnning。也没有它我又收到了另一个错误。

这是我的项目/ plugins.sbt

中的一行
addSbtPlugin("io.teamscala.sbt" % "sbt-babeljs" % "1.0.3")

老实说,我已经阅读了一半的书,但钢铁对这个工具感到不舒服。

1 个答案:

答案 0 :(得分:0)

从阅读SBT文件看起来您的输入和输出使用相同的目录。我怀疑这个目录在sourceDirectories。通过更新该目录中的文件,它将任务标记为脏,并按照您的说法进行操作 - 无限地重建它。

典型的sbt版本将源文件和生成的文件分开。在纯scala世界中,生成的源通常在sourceManaged下进入target/

如果我发现更多内容,我会更新此答案。