Включить / исключить папку / каталог ресурсов в sbt/play-framework

Я пытаюсь включить gulp, angular project в приложение play-framework 2.4.X.

Существует папка node_modules, которая содержит множество файлов и папок. SBT включает эти файлы в мой процесс сборки; это делает мой процесс сборки очень медленным.

Поэтому я хочу исключить этот и другие ненужные файлы и папки. Частичный код моих файлов build.sbt

lazy val gulpDirectory = baseDirectory { _ / "admin-panel" }
unmanagedResourceDirectories in Assets <+= gulpDirectory

//includeFilter in Assets in unmanagedResourceDirectories := {
//    new SimpleFileFilter( file =>
//        file.getParent == "bower_components" ||
//                file.getParent == "tmp" ||
//                file.getParent == "dist"
//    )
//}

includeFilter in Assets in unmanagedResourceDirectories := "bower_components" || "dist" || "tmp"
excludeFilter in Assets in unmanagedResourceDirectories := new SimpleFileFilter(_.getParent == "node_modules")

Но они не работают, и SBT включает все файлы и папки из папки админ-панели. Может кто-нибудь помочь мне, так как я новичок в SBT.

1 ответ

Мое решение было...

build.sbt

import play.sbt.PlayImport.PlayKeys.playRunHooks

lazy val gulpDirectory = baseDirectory {
    _ / "admin-panel"
}

excludeFilter := HiddenFileFilter -- ".tmp"

unmanagedResourceDirectories in Assets <+= gulpDirectory { _ / "dist"}

unmanagedResourceDirectories in Assets <+= gulpDirectory { _ / ".tmp"}

unmanagedResourceDirectories in Assets <+= gulpDirectory { _ / "bower_components"}

//this is for development environment
unmanagedResourceDirectories in Assets <+= gulpDirectory { _ / "src" / "app"}

playRunHooks <+= gulpDirectory.map(path => Gulp(path))

проект / Gulp.scala

import play.sbt.PlayRunHook
import sbt._

import java.net.InetSocketAddress

object Gulp {
    def apply(base: File): PlayRunHook = {

        object GulpProcess extends PlayRunHook {

            val gulpFile = "gulpfile.js"
            var process: Option[Process] = None

            override def beforeStarted(): Unit = {
                if (isWindows) {
                    Process("cmd /c gulp build", base).run
                } else {
                    Process("gulp build", base).run
                }
            }

            override def afterStarted(addr: InetSocketAddress): Unit = {
                if (isWindows) {
                    Some(Process("cmd /c gulp serve", base).run)
                } else {
                    Some(Process("gulp serve", base).run)
                }
            }

            override def afterStopped(): Unit = {
                process.map(p => p.destroy())
                process = None
            }

            private def isWindows: Boolean = {
                System.getProperty("os.name").startsWith("Windows")
            }
        }

        GulpProcess
    }
}
Другие вопросы по тегам