如何将多个文件放入单个命名空间/模块中? (JavaScript的)

时间:2010-09-17 05:55:15

标签: javascript namespaces module

我一直在阅读有关模块模式的内容,但我读到的所有内容都假设模块的全部内容都在一个文件中。我希望每个班级有一个文件。

我已经在每个文件的顶部执行此操作:

if(window.ModuleName === undefined) { window.ModuleName = {}; }

ModuleName.ClassName = function () { ... }

但这允许包含文件而不依赖它们,这也很烦人。例如,假设ClassA使用ClassB,而“ClassB.js”不在HTML中,那么ClassA会抛出错误。据我所知,Javascript缺少import语句,所以在这种情况下我实际上希望所有内容都在一个文件中。

我认为大型javascript项目被分解为多个文件,所以必须有办法解决这个问题。一般情况如何?是否有一些工具可以将多个类文件合并到一个模块文件中?

1 个答案:

答案 0 :(得分:3)

这是一个很大的话题,但让我尽可能多地解释一下。 Javascript要求您预先加载了您打算使用的任何内容,这就是您的模块模式在同一文件中包含所有“内容”的原因。但是,如果您计划将它们分隔在不同的文件中,那么您必须在使用之前对其进行管理。我建议采用以下方法

  1. 在服务器中提供它们之前连接它们。例如,在jsp中,您可以创建一个返回contenttype =“text / javascript”的servlet,在该servlet中,您可以在一个动态生成的脚本中附加所需的所有脚本,然后将其返回给客户端。

  2. 在您的ant或maven构建等中,有一些配置,您可以将它们连接在一起。这是一种常见做法,因此您应该在互联网上找到许多参考资料。

  3. 延迟加载javascripts。这是我的首选方式。我使用Lazyload javascript library。基本上我声明某些代码的依赖关系很像Java中的“import”,然后在我调用它们之前我加载它们的依赖项。这允许在没有脚本冗余的情况下优化依赖性加载。问题是您需要编写一些相当复杂的脚本来执行此操作。

  4. 希望能提供帮助。