【问题标题】:Your thoughts on a proposal to manage JavaScript dependencies您对管理 JavaScript 依赖项的提议的看法
【发布时间】:2011-04-15 13:40:28
【问题描述】:

我最近在开发Rich Internet Application 的背景下完成了大量的JavaScript 编程。我在开发之初的看法和现在差不多。 JS RIA 有效,但缺少开发工具。

我特别错过的一个工具是用于管理依赖项。我发现我最终得到了很多 HTML 页面,声明了它们所有的 JS 文件依赖项,而且这变得难以维护。

我想知道您对我着手的一个项目的看法:Maven JavaScript 导入。我的意图是最终将项目作为开源发布,但目前我只是在修补它(虽然已经开发了很多东西)。

声明依赖关系

我的想法基于使用 Maven 将 JS 文件声明为依赖项。这就是我在我的 pom 文件中声明对 jQuery 的项目依赖的方式:

<dependency>
  <groupId>com.jquery</groupId>
  <artifactId>jquery</artifactId>
  <version>1.4.2</version>
  <type>js</type>
</dependency>

然后依赖于 jQuery 的文件有两种声明其依赖关系的方法:

  1. 通过注释块中的@import 语句;或
  2. 只需声明一个所需的全局变量。

进口

显式导入采用以下形式:

/**
 * @import com.jquery:jquery
 */

如您所见,导入的格式是&lt;groupId&gt;:&lt;artifactId&gt;。该方法的优点是在具有依赖关系的 js 文件中没有声明文件/版本信息。这些 GAV 参数解析为 POM 文件中声明的工件。

全局变量

而不是上面的@import,如果一个依赖文件在全局范围内声明变量,那么只需声明任何这些全局符号就可以了。例如,如果一个文件需要 jQuery:

var $;

... 因为 $ 当然是 jQuery 定义的全局变量。

并非所有依赖项都声明全局符号,这也是提出 @import 的原因,但我认为声明所需的符号是好的和干净的(并且符合 JSLint!)。

总结

最终,需要 JS 资源的 HTML 文件只是声明它需要的直接资源,而不是它的所有依赖项。我的 Maven 插件将运行所有 JS 文件(源文件和依赖项)并构建一个符号树。任何包含资源的 HTML 文件都将具有由插件注入的脚本元素,以确保包含所有依赖项。当一个项目的阶段被执行时,这一切都会以神奇的 Maven 方式发生。在测试或资源阶段执行之前。

那你怎么看?这是您可能在 JS RIA 项目中使用的东西吗?

【问题讨论】:

  • Google Closure 工具有一个很好的方法来管理依赖关系。每个 JS 文件都声明其依赖项,然后编译器可以将“主”脚本文件所需的所有内容复制在一起。他们使用这些工具包制作了 GMail,所以显然它可以工作。
  • 非常有趣。感谢那;我将进一步研究 Closure Tools。关于我的提议,我忘记提及的一件事是依赖项是静态引入的,即在加载 html 文档时。我还没有彻底探索闭包,但我得到的印象是依赖项是根据需要延迟引入的。我已经沿着这条路径开发了一些东西,我知道通过 FireBug 和其他方法进行调试并不能很好地解决这个问题。只是一个想法。不过再次感谢 - 我将仔细研究 Closure 的机制。
  • 在进一步调查中,我没有看到 Closure 管理依赖项的版本控制 - 似乎也没有任何存储库的概念......当然,Maven 在这方面非常强大。
  • “我还没有彻底探索过闭包,但我得到的印象是依赖项是根据需要延迟引入的。”不,仅在开发期间。对于生产使用,所有内容都被编译到一个文件中。但你是对的,Closure 不管理版本控制或存储库。
  • 所以已经一年多了。给我看代码!

标签: javascript maven-2 dependencies mojo


【解决方案1】:

我同意 JavaScript 开发人员在他们的项目中缺少适当的依赖管理。我没有完全遵循 HTML 文件如何仅导入单个文件 js 依赖项,然后最终得到所有依赖项。您是否打算过滤 HTML 文件并将脚本导入替换为串联类的导入?

如果您有兴趣,我已经走过了同一条路,最终得到了https://github.com/ProggerPete/JavaScript-Tools。它对我来说效果很好。

【讨论】:

【解决方案2】:

我认为Bower 是管理 .js 依赖项的有趣且正确的方法。

【讨论】:

    猜你喜欢
    • 2015-12-09
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 2012-02-19
    • 1970-01-01
    相关资源
    最近更新 更多