如果您想为每个页面加载整个 javascript 源代码,请确保将其编译到一个文件中。如果您根据用户执行的操作或加载的页面加载不同的代码,请使用 AMD 加载的模块。另一种选择是列出一堆脚本标签,当然一次只能加载一个并且可能需要一段时间。
AMD 不是一个特定的库,它实际上是加载您提到的大多数加载器使用的 javascript 模块的标准。这意味着它们都使用相似的语法来定义和加载模块。他们正在考虑让 AMD 成为 ECMA 脚本规范的一部分。它的用处在于您还可以定义依赖项,因此如果您的代码需要运行 jQuery,您可以将其列为依赖项,并将其加载到您的模块命名空间中。
define( [ 'jquery' ], function ( $ ) {
// use jquery in here without clouding up the global namespace
return {}; // return your module for use in a different module or whatever
};
在此示例中,在下载 jquery 模块之前,不会运行已定义模块中的代码。然后它将 jquery 模块作为参数直接注入到您新定义的模块中$
。
您现在可以将代码整齐地组织到包含模块的文件中。您的任何模块都不会混淆全局命名空间。您的所有依赖项都将确保在您的模块运行之前已加载(没有加载依赖代码段的竞争条件错误)。
另一个优点是您可以将加载程序设置为对同一模块使用不同的路径,因此您可以将jquery
模块的路径定义为“https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/ jquery.min.js' 在您的代码中的一个位置,即使它几乎可以在每个模块中使用。jquery
现在,当我需要将我的 jquery 版本更新到 1.8.3 时,我可以简单地在我的代码中的一个位置更改路径,它将为每个用作依赖项的模块使用此路径。当您使用模块存根或调试某些模块的版本时,这对于在测试时轻松切换也很有用。
现在,小型项目不一定需要这样做。但是,您的项目越大,这种类型的加载就越有意义。