Grails 资源 : How to properly create environment-aware resources?

标签 grails resources environment

我真的很喜欢 Grails 的资源插件,我们在 Grails 2.2 的项目中广泛使用它。我现在想对此进行一些扩展以使其具有环境意识,例如,这样我就可以避免在生产中加载某些实际上仅用于开发和测试的 JavaScript 库。

根据 Grails 文档 ( http://grails-plugins.github.com/grails-resources/guide/3.%20Declaring%20resources.html#3.2%20Resource%20artefacts ),这应该是微不足道的,因为 grails-app/conf 文件夹中的这些 *Resources.groovy 文件应该是 Groovy ConfigSlurper 脚本(就像 DataSource.groovy 一样),因此支持“环境” block 语法。

我的问题是,尝试按照文档似乎所说的方式实现这种风格只能完全破坏资源插件。再加上 IntelliJ IDEA 无法识别环境 block ,我不明白这是如何工作的。这就是我所说的,其中环境 block 正在抛出整个资源注入(inject):

modules = {
    stuff {
        resource 'js/lib/script1.js'
        resource 'js/lib/script2.js'
    }
}

environments {
    production {
        stuff {
            resource 'js/lib/script1.js'
        }
    }
}

在这里,我只是想拥有一个模块,当在生产环境中运行时,该模块专门从“stuff”资源中排除特定脚本。如果有人能说出正确的方法来做到这一点,我将非常感激!提前致谢!

更新!!!

好吧,我想我已经摆弄并找到了设置环境感知资源的正确方法。我现在唯一的问题是弄清楚如何在 bundle 中包含默认资源,这样跨环境就不会出现所有重复。假设我有以下设置:

environments {
    development {
        modules = {
            stuff {
                resource 'js/script1.js'
                resource 'js/script2.js'
                resource 'js/OnlyForDevelopment.js'
            }
        }
    }
    production {
        modules = {
            stuff {
                resource 'js/script1.js'
                resource 'js/script2.js'
            }
        }
    }
}

正确的编写方法是什么,以便 script1 和 script2 可以设置为“stuff”资源包的默认值,这样它们就不必写出两次,每个环境 block 一次?这只是一个小例子,但我真的很想避免为每个环境 block 复制每个共享资源。有一个优雅的解决方案吗?是否可以有一个“通用”资源 block ,我可以在其中设置模板“东西”资源,该资源将成为环境感知版本添加的任何内容的基础?如果是这样,环境感知资源是否可以包含来自带有 dependentOn 语句的通用 block 的资源?我尝试过让这些事情发生,但没有成功。

最佳答案

您可以使用dependsOn来分隔共享模块。

modules = {

    stuff {
       resource 'js/script1.js'
       resource 'js/script2.js'
    }

    devStuff {
       dependsOn 'stuff'
       resource 'js/OnlyForDevelopment.js'
    }

}

我们尝试不将环境配置放入资源文件中。这感觉有点神奇,你很快就会忘记哪些环境在哪里。这有点像维护噩梦。

相反,在我们的布局中,我们可以根据环境设置模块,

即,

<g:if env='test'>
     <r:use module='testStuff...'/> </g:if> <g:else>
     <r:use module='stuff'/> 
</g:else>

(你明白了)。

关于Grails 资源 : How to properly create environment-aware resources?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14530884/

相关文章:

r - 使用 quantmod 库访问 R 中的环境对象

grails - 升级Grails Project Groovy\Grails工具套件时出现错误

c# - 编码消息表资源

c++ - 如何将数据从资源指针存储到 C++ 中的静态内存缓冲区?

资源文件夹中的java spring图像不可用(404错误)

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

java - 如何测试 HQL 查询?

java - 在 grails 1.3.7 中使用 jcaptcha 插件时出错

java - 设置 Grails 分布式缓存时 ehcacheMulticastGroupAddress 出错

grails - 更改 GORM 表名称