- よくrpscalaにいる
- 最近PureScriptに夢中
- 来月から銀座の某D社で働くらしい
object SbtGzip extends AutoPlugin { override def requires = SbtWeb override def trigger = AllRequirements object autoImport { val gzip = TaskKey[Pipeline.Stage]("gzip-compress", "Add ...") } import autoImport._ override def projectSettings: Seq[Setting[_]] = Seq( gzip := Def.task { ... }.value ) }
// project/plugins.sbt addSbtPlugin("com.typesafe.sbt" % "sbt-gzip" % "1.0.0-RC2")
// build.sbt lazy val root = (project.in file(".")).enablePlugins(SbtWeb)
コード生成
アセットパイプライン
テストなど
// SbtCoffeeScript.scala override def projectSettings = Seq( bare := false, sourceMap := true ) ++ inTask(coffeescript)( SbtJsTask.jsTaskSpecificUnscopedSettings ++ inConfig(Assets)(coffeeScriptUnscopedSettings) ++ inConfig(TestAssets)(coffeeScriptUnscopedSettings) ++ Seq( moduleName := "coffeescript", shellFile := getClass.getClassLoader.getResource("coffee.js"), taskMessage in Assets := "CoffeeScript compiling", taskMessage in TestAssets := "CoffeeScript test compiling" ) ) ++ SbtJsTask.addJsSourceFileTasks(coffeescript) ++ Seq( coffeescript in Assets := (coffeescript in Assets).dependsOn(webModules in Assets).value, coffeescript in TestAssets := (coffeescript in TestAssets).dependsOn(webModules in TestAssets).value )
Task[Pipeline.Stage]
で作るmapping
を修正して返すpipelineStages := Seq(rjs, digest, gzip)のように適用する順番を指定してもらう
// val gzip = TaskKey[Pipeline.Stage]("gzip-compress", "Add gzipped files to asset pipeline.") // gzip := gzipFiles.value def gzipFiles: Def.Initialize[Task[Pipeline.Stage]] = Def.task { mappings => val targetDir = webTarget.value / gzip.key.label val include = (includeFilter in gzip).value val exclude = (excludeFilter in gzip).value val gzipMappings = for { (file, path) <- mappings if !file.isDirectory && include.accept(file) && !exclude.accept(file) } yield { val gzipPath = path + ".gz" val gzipFile = targetDir / gzipPath IO.gzip(file, gzipFile) (gzipFile, gzipPath) } mappings ++ gzipMappings }
Important contact information goes here.