【问题标题】:Resources Plugin -- How To include all contents in a directory?资源插件——如何在目录中包含所有内容?
【发布时间】:2012-05-09 17:00:22
【问题描述】:

我有一个 grails 应用程序,其中包含一系列嵌套目录中的大量单个 javascript 文件。我想通过资源插件管理它们,但不想显式注册每一个。

网站目录结构

webapp
  app
    controller
      controller1.js
      controller2.js
      ...
    model
      model1.js
      ...
    view
      view1.js

最好在我的AppResources.groovy 文件中声明:

resource url: 'app/**/*.js'

但这不起作用——抛出一个空指针。我试过了:

resource url: 'app/**' 但没有运气

我认为我会在配置文件中放入一些代码,这些代码将通过目录结构递归,但这似乎不起作用。这是我尝试过的:

def iterClos = {
        it.eachDir( iterClos );
        it.eachFile {
            resource url: ${it.canonicalPath};

        }

    }

    iterClos( new File("$grails.app.context/app") )

不幸的是,它也失败了。

有没有人知道如何实现这一目标?

【问题讨论】:

  • Grails 资源插件有一个功能请求来执行此操作:jira.grails.org/browse/GPRESOURCES-90 只是在这里转发,因此如果其他人不想依赖配置中的循环,他们可以投票支持 JIRA替代品。
  • @virtualandy,我已将我的 cmets 添加到 jira 功能请求中。人们似乎错过了这样一个事实,即手动将目录中的每个 javascript 文件输入到资源配置中是一件很痛苦的事情。其他人,请在 jira 中为这个功能投票,好吗?

标签: grails resources


【解决方案1】:

问题解决了。

事实证明,运行代码以通过我的 javascript 目录回避的想法是可行的。我只是代码不正确。这是动态加载我的 javascript 文件的代码:

--AppResources.groovy

import org.codehaus.groovy.grails.web.context.ServletContextHolder as SCH

modules = {
    core {
        resource url: '/resources/css/app.css', disposition: 'head'
        resource url: '/resources/css/myapp.css', disposition: 'head'
        resource url: '/extjs/ext-all-debug.js', dispostion: 'head'

        getFilesForPath('/app').each {
          resource url: it
        }
    }
}

def getFilesForPath(path) {

    def webFileCachePaths = []

    def servletContext = SCH.getServletContext()

    //context isn't present when testing in integration mode. -jg
    if(!servletContext) return webFileCachePaths

    def realPath = servletContext.getRealPath('/')

    def appDir = new File("$realPath/$path")

    appDir.eachFileRecurse {File file ->
        if (file.isDirectory() || file.isHidden()) return
        webFileCachePaths << file.path.replace(realPath, '')
    }

    webFileCachePaths
}

以上将导致资源插件跟踪我的 javascript 文件。这是资源处于调试模式时 html 的样子:

<script src="/myapp/extjs/ext-all-debug.js?_debugResources=y&n=1336614540164" type="text/javascript" ></script>
<script src="/myapp/app/controller/LogController.js?_debugResources=y&n=1336614540164" type="text/javascript" ></script>
<script src="/myapp/app/controller/LoginController.js?_debugResources=y&n=1336614540164" type="text/javascript" ></script>
<script src="/myapp/app/controller/ProfileController.js?_debugResources=y&n=1336614540164" type="text/javascript" ></script>

...

作为 Grails 的新手,可以将可执行代码放在配置文件中是一个非常受欢迎的事实!

【讨论】:

  • 我只是想写我自己的插件来做到这一点,因为我找不到任何关于它的信息。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多