首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grails资源:如何正确创建环境感知资源?

Grails资源:如何正确创建环境感知资源?
EN

Stack Overflow用户
提问于 2013-01-26 05:46:27
回答 2查看 1.3K关注 0票数 2

我真的很喜欢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一样),因此支持"environments“块语法。

我的问题是,试图实现这种风格,文档似乎告诉我,我只能完全打破资源插件。再加上IntelliJ IDEA无法识别环境块,我看不出这是如何工作的。这就是我所说的,其中环境块抛出了整个资源注入:

代码语言:javascript
复制
modules = {
    stuff {
        resource 'js/lib/script1.js'
        resource 'js/lib/script2.js'
    }
}

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

在这里,我简单地尝试了一个模块,当在生产环境中运行时,它明确地将特定的脚本排除在“材料”资源之外。如果有人能告诉我正确的方法,我将不胜感激!提前感谢!

更新!

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

代码语言:javascript
复制
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设置为“填充”资源包的默认值,这样就不必写出两次,每个环境块一次?这只是一个小示例,但我真的希望避免为每个环境块复制每个共享资源。有没有一个优雅的解决方案呢?是否可以有一个“通用”资源块,在那里我可以设置一个模板“东西”资源,它将成为环境感知版本添加的任何东西的基础?如果是这样,环境感知资源是否可以通过dependsOn语句包含来自泛型块的资源?我试着让这些事情发生,但都无济于事。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-26 11:05:25

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

代码语言:javascript
复制
modules = {

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

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

}

我们尽量不将环境配置放在资源文件中。这感觉有点神奇,你很快就会忘记哪种环境会去哪里。这有点像是维护的噩梦。

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

也就是说,

代码语言:javascript
复制
<g:if env='test'>
     <r:use module='testStuff...'/> </g:if> <g:else>
     <r:use module='stuff'/> 
</g:else>

(你明白我的意思)。

票数 3
EN

Stack Overflow用户

发布于 2013-05-27 01:14:31

我会选择你的替代方案,有不同的Resources.groovy文件,每个环境一个。那是

GlobalResources.grooy

代码语言:javascript
复制
modules = {
    globalScripts {
        resource 'js/script1.js'
        resource 'js/script2.js'
    }
}

ProductionResources.groovy

代码语言:javascript
复制
environments {
    production {
        modules = {
            stuff {
                dependsOn 'globalScripts'
            }
        }
    }
}

DevelopmentResources.goovy

代码语言:javascript
复制
environments {
    development {
        modules = {
            stuff {
                dependsOn 'globalScripts'
                resource 'js/OnlyForDevelopment.js'
            }
        }
    }
}

我想这就是你想要的。

ps:我注意到你在最新的答案中提到了不同的资源,但我不确定这是不是你所做的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14530884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档