我最近在开发富 Internet 应用程序的上下文中完成了大量的 JavaScript 编程。我在开发之初的看法和现在差不多。JS RIA 有效,但缺少开发工具。
我特别错过的一个工具是用于管理依赖项。我发现我最终得到了很多 HTML 页面,声明了它们所有的 JS 文件依赖项,并且这变得难以维护。
我想知道的是您对我着手的一个项目的看法:Maven JavaScript Import。我的意图是最终将该项目作为开源发布,但目前我只是在修补它(虽然已经开发了很多)。
声明依赖
我的想法基于使用 Maven 将 JS 文件声明为依赖项。这就是我在我的 pom 文件中声明对 jQuery 的项目依赖的方式:
<dependency>
<groupId>com.jquery</groupId>
<artifactId>jquery</artifactId>
<version>1.4.2</version>
<type>js</type>
</dependency>
然后依赖于 jQuery 的文件有两种声明其依赖关系的方法:
- 通过注释块中的@import 语句;或者
- 只需声明一个所需的全局变量。
进口
显式导入采用以下形式:
/**
* @import com.jquery:jquery
*/
如您所见,导入的格式是<groupId>:<artifactId>
. 该方法的优点是在具有依赖关系的 js 文件中没有声明文件/版本信息。这些 GAV 参数解析为 POM 文件中声明的工件。
全局变量
而不是上面的@import,如果一个依赖文件在全局范围内声明变量,那么只需声明任何这些全局符号就可以了。例如,如果一个文件需要 jQuery:
var $;
... 因为 $ 当然是由 jQuery 定义的全局变量。
并非所有依赖项都声明全局符号,这也是提出 @import 的原因,但我认为声明所需的符号是好的和干净的(并且符合 JSLint!)。
综上所述
最终,需要 JS 资源的 HTML 文件只是声明它需要的直接文件,而不是它的所有依赖项。我的 Maven 插件将运行所有 JS 文件(源文件和依赖项)并构建一个符号树。任何包含资源的 HTML 文件都将具有由插件注入的脚本元素,以确保包含所有依赖项。当一个项目的阶段被执行时,这一切都会以神奇的 Maven 方式发生,例如在测试之前,或者资源阶段执行。
所以你怎么看?这是您可能在 JS RIA 项目中使用的东西吗?