2012-08-01 57 views
0

我已经开始构建一个网站并使用Require.js来选择性地加载我需要实现功能的脚本。是:是require.js“正常”网站的正确工具(作业)“

  • “主”的剧本还没有执行完毕(或者甚至下载)之前,我的一些代码使用“规定”加载依赖这意味着该require.js配置还没有运行,并且不不知道我的脚本的位置
  • 因为require.js配置在我的代码需要使用它的时候没有运行,所以“shim”机制没有被初始化并且不能使用

Common Errors页面以及我似乎在网上阅读的大量问题尝试解决自己的问题似乎表明,这不是正确的工具。

这似乎对单页面应用程序或node.js应用程序很有用,但对require.js初始化之前其他脚本可能正在运行的传统站点不起作用。

如果require.js不适合工作,是否有适合这份工作的工具?如果是的话那是什么?

回答

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.jsmoduleB.js必须换一个define()里面的内容。在moduleA.js(这取决于模块C):

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

    return A; 
}); 

我现在不知道如果你在一个define调用包装你的模块。不这样做可以解释您遇到的乱序执行。

RequireJS是传统网站上完美有效的工具,而不仅仅是单页网站。

+0

不,我不是。我似乎找不到任何示例在线显示您所指的内容。请介意给我正确的方向吗? – Nippysaurus 2012-08-01 04:18:21

+0

我编辑了我的回复以包含一些示例代码。 – 2012-08-01 16:06:23

+0

我编辑了我的回复以包含一些示例代码。 – 2012-08-01 16:07:01

相关问题