java - 从 Java Play 中的同一位置提供 LESS、Javascript 和静态资源

标签 java angularjs playframework less playframework-2.2

动机

我目前正在开发一个使用 Angular.js 的 Java Play 应用程序。目前,我正在尝试根据功能重组我的公用文件夹。例如,与一个组件关联的所有 Javascript、模板文件等都将放在一个文件夹中,如下所示:

public
    directives
        component-1
            component-1.template.html
            component-1.js
        component-2
            component-1.template.html
            component-2.js
    scripts
        app.js
    stylesheets
        main.css

现在,我尝试用我的 CSS 做同样的事情,并像这样拆分选择器:

public
    directives
        component-1
            component-1.template.html
            component-1.js
            component-1.less
        component-2
            component-1.template.html
            component-2.js
            component-2.less
    scripts
        app.js
    stylesheets
        main.less

理想情况下,main.less 应该包含最少甚至没有 CSS,并且只导入 component-1.lesscomponent-2.less


问题

但是,当我尝试这样做时,Play 似乎没有编译我的 less 文件。根据文档,Play 似乎只会在 app/assets 中编译较少的文件。

因此,我尝试将我的 public 文件夹的内容移动到 app/assets。 Play 成功检测并编译了我的 less 文件,并将生成的 CSS 和 Javascript 移动到 public 文件夹,但没有移动我的模板 html 文件。

我还尝试将所有内容移回公用文件夹并从那里编译 less 文件,但 Play 要么抛出异常,要么完全忽略 less 文件,具体取决于我的配置。


我的问题

所以基本上,如果我尝试将文件放在 app/assets 文件夹中,.html 模板文件将被忽略。如果我尝试将文件放在 public 中,那么 .less 文件将失败。

显然,我可以拆分,只需将较少的文件放在 assets 中,将另外两个文件放在 public 中,但这违背了将相关文件放在一起的目的。

所以,我想我有三个问题。我不需要所有的人都回答——只要回答一个就足以解决我遇到的问题。我真的不在乎我是使用 public 还是 app/assets -- 我只想将文件放在一起。

  1. 是否可以构建包含在公用文件夹中而不是 apps/assets 中的 .less 文件?
  2. 是否可以将 Play 配置为停止忽略 app/assets 中的 .html 文件?
  3. 是否有其他方法可以实现我正在寻找的目录结构?

这是我的 build.sbt 文件:

name := "my-project"

version := "1.0-SNAPSHOT"

scalaVersion := "2.10.3"

libraryDependencies ++= Seq(
  javaJdbc,
  javaEbean,
  cache,
  "org.projectlombok" % "lombok" % "1.14.4"
)     

play.Project.playJavaSettings


def customLessEntryPoints(base: File): PathFinder = (
  (base / "public" / "stylesheets" * "*.less")
)

play.Project.playScalaSettings ++ lesscSettings

lessEntryPoints := Nil

lesscEntryPoints in Compile <<= baseDirectory(customLessEntryPoints)

lesscOptions in Compile := Seq("--yui-compress", "--verbose")

我目前正在使用 play-lessc插件。

最佳答案

如果您的设置不起作用,我想知道 lesscEntryPoints 的目的是什么。我还想知道您的问题是否应该标记为 Less。

play-lessc 允许您设置编译器选项 ( http://lesscss.org/#using-less-command-line-usage )。这些选项包括 --include-path=PATHS 设置包含路径。由 :. 分隔使用 ;在 Windows 上。 当您将 include-path 设置为 /public/ 时,您可以执行 @import "stylesheets/project.less"; 在 "apps/assets/main.less"和 @import "directives/component-1/component-1.less";stylesheets/project.less等等

关于java - 从 Java Play 中的同一位置提供 LESS、Javascript 和静态资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25087033/

相关文章:

java - 控制swf文件起始帧

java - 使用 @PrimaryKey 0(零)初始化 Realm 对象在第二个对象上失败

java - 专门从一系列类(class)写入 csv 文件

angularjs - CORS错误-获取$ compile错误和XMLHttpRequest无法加载错误?

playframework - Play 框架和线程池

Java 8 泛型 : Reducing a Stream of Consumers to a single Consumer

javascript - Angular 路由与 UI 路由问题

javascript - ng-disabled 可以应用于哪些元素?

java - 检查 JSON 中包含键并检查 null/empty 的最佳实践?

java - 为什么 Play Framework 2.3.8 部署不起作用?