2016-01-02 25 views

答えて

28

アプリケーションをパッケージ化するときに呼び出されるdiststageタスクの依存関係に使用されるカスタム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のに

を更新するまで;-)

1

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 
関連する問題