RequireJS不遵循baseUrl set的data-main的相对路径

时间:2013-10-30 12:44:06

标签: javascript requirejs

使用requireJS,我试图为我的data-main指定一个与baseUrl不同的路径。似乎requireJS忽略了我在文件名之前输入的内容,并且总是在baseUrl文件夹中查找该文件。

我有以下文件夹结构:

index.html
scripts/
  lib/
    require.js
  test/
    main2.js
  config.js

index.html的内容:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Test</title>
        <script data-main="test/main2" src="scripts/lib/require.js"></script>
        <script src="scripts/config.js"></script>
    </head>

    <body></body>
</html>

config.js的内容:

requirejs.config({
    baseUrl: "scripts"
});

我收到了404错误:GET [...] / scripts / main2.js,即使它应该寻找[...] / scripts / test / main2.js。如果我删除config.js文件并使用data-main =“scripts / test / main2”它可以工作,但我希望能够为我的项目指定一个baseUrl。

有什么想法吗?

编辑:按照Waxen的回答:

  • 即使我在我的data-main中使用“scripts / test / main2”,“/ scripts / test / main2”或“whateverIWant / main2”,奇怪的是它总是寻找“scripts / main2.js”

请注意,我使用的是requirejs 2.1.8

2 个答案:

答案 0 :(得分:11)

这不符合您的要求,因为您在设置baseURL之前使用data-main调用require。我不知道为什么它会尝试去script / main2.js;我希望它尝试加载test / main2.js而不是scripts / main2.js。然而,这不是重点。

您需要做的是确保在尝试加载data-main之前可以使用baseURL。这可以通过首先包含您的配置并使用第二个示例中的语法来完成:http://requirejs.org/docs/api.html#config


index.html的内容:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Test</title>
        <script src="scripts/config.js"></script>
        <script data-main="test/main2" src="scripts/lib/require.js"></script>
    </head>

    <body></body>
</html>

config.js的内容:

var require = {
    baseUrl: "scripts"
};

答案 1 :(得分:7)

我读过这个帖子并且不太明白为什么使用data-main属性指向配置js文件与在加载Require之前指定配置相同,作为对此的回答线程暗示。

在我的实验中,我了解到使用data-main config js文件设置值可能工作(然后,它可能不会)。对于那些刚接触到需求和AMD以及异步性的人来说,&#34;可能会起作用&#34;这个概念与异步操作在当时可以运行的事实有关 - 而不是以任何可预测的顺序运行。

在确定了这一点后,在当前版本的RequireJS文档中提出了一个非常重要的观点,直到现在还没有这样做:

  

您也可以从数据主入口点调用require.config,但是   请注意,data-main脚本是异步加载的。避免   其他入口点脚本错误地假设data-main及其   require.config将始终在加载脚本之前执行。

有关详细信息,请参阅:http://requirejs.org/docs/api.html#data-main

作为RequireJS的新手,我对这一点感到有点震惊 - 我浪费了大量时间来尝试调试路径访问问题。在这个阶段,我不清楚为什么有人会使用data-main(特别是定义baseUrl),因为这个引用只会随机工作。相反,此线程建议的解决方案(在其中将baseUrl设置为非异步的脚本标记中,将按预期工作,并在启动RequireJS之前可靠地设置RequireJS配置。