我真的很喜欢 Grails 的资源插件,我们在 Grails 2.2 中的项目中广泛使用它。我现在想将其扩展为环境感知,例如,我可以避免在生产中加载某些 JavaScript 库,而这些库实际上只需要用于开发和测试。
根据 Grails 文档(http://grails-plugins.github.com/grails-resources/guide/3.%20Declaring%20resources.html#3.2%20Resource%20artefacts),这应该是微不足道的,因为这些 *Resources.groovy 文件grails-app/conf 文件夹中的应该是 Groovy ConfigSlurper 脚本(就像 DataSource.groovy 一样),因此支持“环境”块语法。
我的问题是,试图以文档似乎在说我只能完全破坏资源插件的方式来实现这种风格。再加上 IntelliJ IDEA 无法识别环境块,我不明白这应该如何工作。这就是我所说的,其中环境块正在抛出整个资源注入:
modules = {
stuff {
resource 'js/lib/script1.js'
resource 'js/lib/script2.js'
}
}
environments {
production {
stuff {
resource 'js/lib/script1.js'
}
}
}
在这里,我只是想拥有一个模块,当在生产环境中运行时,该模块专门从“stuff”资源中排除特定脚本。如果有人能说出正确的方法来做到这一点,我将不胜感激!提前致谢!
更新!!!
好的,我想我已经摆弄并找到了设置环境感知资源的正确方法。我现在唯一的问题是弄清楚如何在捆绑包中拥有默认资源,这样就不会在环境中出现所有这些重复。假设我有以下设置:
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”资源包的默认值,这样它们就不必写出两次,每个环境块一次?这只是一个小例子,但我真的很想避免为每个环境块复制每个共享资源。有没有一个优雅的解决方案?是否有一个“通用”资源块,我可以在其中设置一个模板“东西”资源,作为环境感知版本添加的任何内容的基础?如果是这样,环境感知资源是否可以包含来自具有 dependsOn 语句的通用块的资源?我试图让这些事情发生,但无济于事。