【问题标题】:How to ignore a folder to compile in play framework如何忽略要在播放框架中编译的文件夹
【发布时间】:2017-08-04 14:53:37
【问题描述】:

我有一个 node_modules 文件夹,它位于 public 文件夹中,它包含许多文件,导致我的 localhost:9000 持续加载数小时 我想在播放框架中忽略这个文件夹 根据这个问题Include/Exclude asset folder/directory in sbt/play-framework

我已按照以下步骤操作: build.sbt

mappings in (Compile, packageBin) ~= { _.filterNot { case (_, name) =>
      name.startsWith("public\\node_modules")
}}

import play.sbt.PlayImport.PlayKeys.playRunHooks
    lazy val gulpDirectory = baseDirectory {
        _ / "admin-panel"//what should i write here? 
    } 
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
    }
}

我有两个问题 首先是node_modules 位于home/user/git/testproject/public/node_module 我应该写什么来代替admin-panelbuild.sbt 我试过写public

import play.sbt.PlayImport.PlayKeys.playRunHooks
lazy val gulpDirectory = baseDirectory {
    _ / "public"
}

但是我遇到了这个异常

java.io.IOException: Cannot run program "gulp" (in directory "home/user/git/testproject/public"): error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
Caused by: java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
    at java.lang.ProcessImpl.start(ProcessImpl.java:134)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
[trace] Stack trace suppressed: run last testproject/compile:run for the full output.
[error] (arteciate/compile:run) java.io.IOException: Cannot run program "gulp" (in directory "/home/user/git/testproject/public"): error=2, No such file or directory
[error] Total time: 2 s, completed Aug 4, 2017 7:44:14 PM

其次,如果有其他方法可以忽略 node_modules 文件夹,请提供帮助,因为我无法 debugtestrun 我的项目。 我正在使用play 2.4

编辑 我正在使用 play 2.4 我的 play 应用程序运行良好,然后我需要安装一些 UI 组件,例如 graunt bower ruby compass 在安装这些组件之后,当我在 reload reload @987654344 之后执行激活器运行时@ 并点击 localhost:9000 加载页面需要将近一个小时或更长时间

【问题讨论】:

  • 为什么 node_modules 是公共的而不是根目录?
  • 我不知道我已经安装了 graunt bower ruby​​ compass ui 组件

标签: java playframework gulp sbt playframework-2.4


【解决方案1】:

由于node_modules 文件夹只包含Node.js 不需要被sbt 扫描和编译的模块,您可以在build.sbt 中完全排除该文件夹

excludeFilter := {
    val public = (baseDirectory.value / "public" / "node_modules").getCanonicalPath
    new SimpleFileFilter(_.getCanonicalPath startsWith public)
}

要编译应用程序的Node.js 前端部分,您必须使用专用的gulp build 命令而不是使用Gulp.scala 类。

$ cd /home/user/git/testproject/public/
/home/user/git/testproject/public$ gulp build

如果node_modules中的一些Node.js依赖还需要安装,在运行gulp build之前执行以下命令:

$ cd /home/user/git/testproject/public/
/home/user/git/testproject/public$ npm install

如果node_modules 中的某些Node.js 依赖项已过期,请在运行gulp build 之前执行以下命令:

$ cd /home/user/git/testproject/public/
/home/user/git/testproject/public$ npm update

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 2019-02-10
    相关资源
    最近更新 更多