私はPlay 2.4アプリケーションを開発しており、コンパイル時に静的アセットを生成するためにSBTにwebpackを実行させたいと考えています。SBTからwebpackを実行するには
私はhttps://github.com/stejskal/sbt-webpackを試しましたが、それは私にとってはうまくいかないようです。
私はPlay 2.4アプリケーションを開発しており、コンパイル時に静的アセットを生成するためにSBTにwebpackを実行させたいと考えています。SBTからwebpackを実行するには
私はhttps://github.com/stejskal/sbt-webpackを試しましたが、それは私にとってはうまくいかないようです。
アプリケーションをパッケージ化するときに呼び出されるdist
とstage
タスクの依存関係に使用されるカスタムsbtタスクを定義することによって、それを動作させることができました。
タスクのコードは単純である:私はときにコードの変更webpack watch
を実行するために、play action hooksを使用DEVモードで
lazy val webpack = taskKey[Unit]("Run webpack when packaging the application")
def runWebpack(file: File) = {
Process("webpack", file) !
}
webpack := {
if(runWebpack(baseDirectory.value) != 0) throw new Exception("Something goes wrong when running webpack.")
}
dist <<= dist dependsOn webpack
stage <<= stage dependsOn webpack
:
を:Webpack
と
PlayKeys.playRunHooks <+= baseDirectory.map(Webpack.apply)
次のように定義されます
import java.net.InetSocketAddress
import play.sbt.PlayRunHook
import sbt._
object Webpack {
def apply(base: File): PlayRunHook = {
object WebpackHook extends PlayRunHook {
var process: Option[Process] = None
override def beforeStarted() = {
process = Option(
Process("webpack", base).run()
)
}
override def afterStarted(addr: InetSocketAddress) = {
process = Option(
Process("webpack --watch", base).run()
)
}
override def afterStopped() = {
process.foreach(_.destroy())
process = None
}
}
WebpackHook
}
}
これは魅力的です。あなたは私のgithubので見つけるこの技術を用いてサンプルの再生プロジェクトをアカウント:私はこれは私がSBTの1.0.xのに
を更新するまで;-)
Nouhoumの答えはわずか数罰金働いていたのに役立ちます願っていhttps://github.com/nouhoum/play-react-webpack/blob/master/webpack.sbt
アップデートが必要でした:
import scala.sys.process.Process
lazy val webpack = taskKey[Unit]("Run webpack when packaging the application")
def runWebpack(file: File) = {
Process("npm run build", file) !
}
webpack := {
if(runWebpack(baseDirectory.value) != 0) throw new Exception("Something went wrong when running webpack.")
}
dist := (dist dependsOn webpack).value
stage := (stage dependsOn webpack).value