0

我已经开始构建一个网站,并使用 Require.js 来选择性地加载实现功能所需的脚本。我正在经历的是:

  • 在我的一些代码使用“require”加载依赖项之前,“main”脚本尚未完成执行(甚至下载)。这意味着 require.js 配置没有运行并且不知道我的脚本的位置。
  • 因为 require.js 配置在我的代码需要使用它时尚未运行,因此“shim”机制尚未初始化且无法使用。

常见错误页面以及我在尝试解决自己的问题时似乎在网上阅读的许多问题似乎表明这不是适合这项工作的工具。

这似乎对单页应用程序或 node.js 应用程序很有用,但对于在 require.js 初始化之前可以运行其他脚本的传统站点却没有。

如果 require.js 不是该工作的正确工具,是否有适合该工作的工具?如果是,那是什么?

4

1 回答 1

1

您是否异步加载require.js脚本(使用async='async')?您希望 requirejs 同步加载。加载后,它将异步加载更多脚本,例如您的 main.js 文件。它们可能都乱序加载,但代码实际上会以正确的顺序执行(尊重声明的依赖项)。

因此,在您的页面模板中,您将拥有以下内容:

<script src="/Scripts/require.js" type="text/javascript" data-main="main.js"></script>

这将加载 RequireJS,一旦加载,它就会开始main.js异步加载。通常main.js不定义任何模块,它只是利用其他文件中定义的模块。require()这些依赖项在调用中列出:

require(["moduleA", "moduleB"], function(A, B){
  // Do something with A and B
  A.someFunction();
  B.someOtherFunction();
});

文件moduleA.js并且moduleB.js必须将它们的内容包装在一个define(). 在moduleA.js(取决于模块 C):

define(["moduleC"], function () {
  // Build up an A
  var A = ....;

  return A;
});

我现在想知道您是否将模块包装在define调用中。不这样做可以解释您遇到的无序执行。

RequireJS 在传统网站上是一个非常有效的工具,而不仅仅是在单页网站上。

于 2012-08-01T04:05:13.497 回答