如何在Grails应用程序中正确地包含JS库?

如何在Grails应用程序中正确地包含JS库?,grails,javascript,grails-plugin,Grails,Javascript,Grails Plugin,我正在编写我的第一个Grails(2.3.6)应用程序,需要使用以下库: 我想从webapp/js/application.js文件中配置这些库。我不确定我是否应该: 手动将库添加到我的web app/js/目录中,然后将它们作为元素从我的GSP内部导入(见下文);或 将它们从BuildConfig.groovy中拉入 采用前一种方法: // Inside index.gsp: <body> <script type="text/javascript" s

我正在编写我的第一个Grails(2.3.6)应用程序,需要使用以下库:

我想从
webapp/js/application.js
文件中配置这些库。我不确定我是否应该:

  • 手动将库添加到我的
    web app/js/
    目录中,然后将它们作为
    元素从我的GSP内部导入(见下文);或
  • 将它们从
    BuildConfig.groovy
    中拉入
采用前一种方法:

// Inside index.gsp:
<body>
    <script type="text/javascript" src="${resource(dir: 'js', file: 'signals.min.js')}" />
    <script type="text/javascript" src="${resource(dir: 'js', file: 'crossroads.min.js')}" />
    <script type="text/javascript" src="${resource(dir: 'js', file: 'hasher.min.js')}" />
    <script type="text/javascript" src="${resource(dir: 'js', file: 'application.js')}" />
</body>
// Inside BuildConfig.groovy:
plugins {
    runtime: ":signals:???"
    runtime: ":crossroads:???"
    runtime: ":hasher:???"
}

哪种方法是使用Grails的正确方法,为什么?而且,如果后一种方法是普遍接受的方法,那么对于每个
运行时
条目,我需要什么值?

就我个人而言,如果您认为这些库非常适合社区,并且希望维护它们,我只会选择插件路径。似乎您应该使用前面提到的资源插件或资产管道插件

就个人而言,我肯定会使用资产管道插件,而不是资源。它将是2.4和IMHO中的默认设置,使用起来更简单、更快。许多其他插件已经与它集成,而且使用非常简单。您还可以添加库的完整非缩小版本,以便在开发过程中可以访问它们进行调试,当您的项目启动时,插件将自动缩小并为您绑定它们

1) 将库添加到/assets/js/。 2) 将此添加到application.js

//This is a javascript file with its top level require directives
//= require signals.js
//= require crossroads.js
//= require hasher.js
//= require_self

console.log("This is my javascript manifest");
3) 将资源添加到页面或布局中

<head>
    <asset:javascript src="application.js"/>
</head>


在Grails 2中没有资产管道,并且作为资产管道问题的解决方案,如CKEditor,我必须做:
在我的appLayout中,将库添加到web app/js。(显然,CKE在资产管道方面存在问题)

以下是文档(Grails v.2.3.7):

我还发现这个链接非常有用:

您使用的是grails应用程序默认附带的资源插件(直到2.3.9版本,2.4.0版本默认的资源管理插件是asset pipeline)。提供了一套有效管理资源的指导原则。请参阅doc了解更多详细信息。谢谢@dmahapatro(+1)-看起来我需要声明一个包含所有3个JS库(信号、十字路口和哈希器)的“模块”,是吗?如果是这样,假设我创建了一个
路由
模块,其中包含所有3个lib的3个资源;如何将此
路由
模块包含在GSP中,以便在页面加载时可用?是。转到文档中的选项。:)