为什么我们必须在require.js中加载data-main两次?

时间:2014-12-26 09:09:25

标签: javascript requirejs

我们在data-main中指定了包含模块一次的文件,然后我们在脚本中再次要求该文件。我们"进口"这样两次。这样做有什么意义?

<script src="js/require.js" type="text/javascript" data-main="js/main"></script>
<script type="text/javascript">
   require['main'], function () {
     //load this page, once "main" has been loaded
     require['something'];
}
</script>

2 个答案:

答案 0 :(得分:2)

来自http://requirejs.org/docs/api.html#data-main

  

如果你想在HTML页面中进行require()调用,那么最好   不使用data-main。 data-main仅供页面使用   只有一个主要的入口点,data-main脚本。对于页面   想要内联require()调用,最好将它们嵌入到内部   require()调用配置:

<script src="scripts/require.js"></script>
<script>
require(['scripts/config']), function() {
    // Configuration loaded now, safe to do other require calls
    // that depend on that config.
    require(['foo'], function(foo) {

    });
});
</script>

因此,如果您要进行某些配置,可以使用以下选项:

  1. 将所有逻辑设置为配置文件并通过data-main加载。
  2. 制作内联脚本,并在示例中需要两次。
  3. 快乐编码,随时可以要求更多信息!

    编辑:内联脚本内容可以与数据主引用文件的内容完全相同。

    实际上,当RequireJS加载时,它会创建一个路径脚本(带有async属性)。

    因此,选择是您的,内联的或外部的。

    另外一件事,在示例中的第一个要求,只加载配置。我认为这是不好的做法,但如果必须,你可以跳过第一个要求,而是在第二个要求之前复制配置。

    希望它有所帮助! :)

答案 1 :(得分:1)

根据文档http://requirejs.org/docs/api.html#data-main,第一个脚本包将触发main.js的加载。在加载main.js之前,第二个脚本标记可能会被执行,因为配置未加载但它可能会获取提取错误的文件。在你的情况下,你明确要求它在main.js加载时执行你的脚本。排除脚本标记上的data-main属性在这里就没问题了。