2016-01-02 20 views

risposta

28

Sono riuscito a farlo funzionare definendo un'attività personalizzata sbt che viene utilizzata una dipendenza per le attività dist e stage invocate quando si impacchetta l'applicazione.

Il codice del compito è semplice:

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 

In modalità dev che uso play action hooks correre webpack watch quando il codice cambia:

PlayKeys.playRunHooks <+= baseDirectory.map(Webpack.apply) 

con Webpack definite come segue:

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 
    } 
} 

Funziona come un fascino. Potete trovare il mio github rappresentare un progetto di gioco campione utilizzando questa tecnica: https://github.com/nouhoum/play-react-webpack/blob/master/webpack.sbt

Spero che questo aiuta ;-)

1

risposta di Nouhoum stava lavorando bene fino a quando ho aggiornato a SBT 1.0.x

Solo alcune aggiornamenti necessari:

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 
Problemi correlati