5

アセット パイプライン (gzip、ダイジェストなど) に追加される JavaScript アセットを生成するためにコンパイルできるように、sbt-webでscala-jsを使用したいと考えています。私は lihaoyi のワークベンチ プロジェクトを認識していますが、これがアセット パイプラインに影響を与えるとは思いません。これら 2 つのプロジェクトを sbt-web プラグインとして統合するにはどうすればよいですか?

4

2 に答える 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 に答える