将纯RequireJS项目移动到Maven

时间:2014-07-28 08:13:50

标签: javascript maven requirejs

我有项目,它使用了带有RequireJS的裸Javascript(+ Jquery + Backbone)。我包括依赖项,如:

require.config({
    baseUrl: "./js/",
    paths: {
        jquery: 'lib/jquery-1.8.2',
        underscore: 'lib/underscore-1.4.2',
        backbone: 'lib/backbone-1.1.2',
        'backbone.localStorage': 'lib/backbone.localStorage'
    },
    shim: {
        underscore: {
            exports: "_"
        },
        backbone: {
            deps: ['underscore', 'jquery'],
            exports: 'Backbone'
        },
        'backbone.localStorage': {
            deps: ['backbone'],
            exports: 'Backbone'
        }
    }
});

我想:将项目移至maven。我不想以如此丑陋的方式包括所有的deps。此外,我想使用Hibenate,Spring和另一个应该通过maven导入的deps。

问题:我还没有深入了解maven插件或RequireJs如何工作。我看了this,但一无所知。

问题: 您是否可以编写如何将我的应用程序移至maven的分步操作点?

1 个答案:

答案 0 :(得分:2)

Maven并不是对你所展示的配置(所谓的)“丑陋”的回答,因为它的工作方式完全不同。首先,Maven是一个服务器端工具,RequireJS是客户端的(如果你已经知道它,请道歉,但是> “我还没有深入了解maven插件或RequireJs如何工作”)。此配置特定于RequireJS,因此无法绕过它。

即使使用Maven,您仍然需要配置前端应用程序并告诉它在哪里可以找到所需的依赖项以及如何初始化它们。客户端应用程序的路径是Web资源,可以与项目的文件结构任意不同,因此自动化配置过程并不容易。

我一直在使用RequireJS maven plugin(在你发布的同一个问题的答案中找到它)来包装r.js但是设置起来相当痛苦,特别是在资源时间戳方面。我只是觉得这种方法存在缺陷,因为Java和JavaScript工具之间存在根本差异 - 你总是会得到一个不太理想的折衷方案,任何非标准的步骤都会花费大量的时间和研究。

另一种越来越受欢迎的方法是将客户端和服务器端应用程序完全拆分为单独的项目,允许您使用特定于语言的工具使流程尽可能顺畅。服务器端使用Maven,客户端使用Grunt + Bower + RequireJS +等。双方通过HTTP使用JSON来讨论定义良好的接口。

应该很容易找到一些介绍性的阅读材料,但是既然你提到了Spring,那么看一下参考Spring应用程序是值得的:Sagan。它演示了如何将前端和后端拆分为独立的Maven子模块,这些子模块共享相同的“核心”。


使用webjars的一个止损解决方案,使得使用Maven 一点更加文明的JS库。您可以直接在pom.xml中定义依赖项,并且它们很容易像其他静态资产一样暴露给前端。但是,这会限制您在捆绑或自定义库时的选择。