アセット パイプライン (gzip、ダイジェストなど) に追加される JavaScript アセットを生成するためにコンパイルできるように、sbt-webでscala-jsを使用したいと考えています。私は lihaoyi のワークベンチ プロジェクトを認識していますが、これがアセット パイプラインに影響を与えるとは思いません。これら 2 つのプロジェクトを sbt-web プラグインとして統合するにはどうすればよいですか?
質問する
1026 次
2 に答える
3
Scala-js は、Scala ファイルから js ファイルを生成します。sbt-web のドキュメントでは、これをSource file taskと呼んでいます。
結果は次のようになります。
val compileWithScalaJs = taskKey[Seq[File]]("Compiles with Scala js")
compileWithScalaJs := {
// call the correct compilation function / task on the Scala.js project
// copy the resulting javascript files to webTarget.value / "scalajs-plugin"
// return a list of those files
}
sourceGenerators in Assets <+= compileWithScalaJs
編集
プラグインを作成するには、もう少し作業が必要です。Scala.js はまだ .js ではないAutoPlugin
ため、依存関係に問題がある可能性があります。
最初の部分は、プラグインへの依存関係として Scala.js ライブラリを追加することです。次のようなコードを使用してそれを行うことができます。
libraryDependencies += Defaults.sbtPluginExtra(
"org.scala-lang.modules.scalajs" % "scalajs-sbt-plugin" % "0.5.5",
(sbtBinaryVersion in update).value,
(scalaBinaryVersion in update).value
)
プラグインは次のようになります。
object MyScalaJsPlugin extends AutoPlugin {
/*
Other settings like autoImport and requires (for the sbt web dependency),
see the link above for more information
*/
def projectSettings = scalaJSSettings ++ Seq(
// here you add the sourceGenerators in Assets implementation
// these settings are scoped to the project, which allows you access
// to directories in the project as well
)
}
次に、このプラグインを使用するプロジェクトで次のことができます。
lazy val root = project.in( file(".") ).enablePlugins(MyScalaJsPlugin)
于 2014-10-23T06:45:50.880 に答える