8

使用requireJS,我试图为我的数据主指定一个与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 的回答:

  • 即使我在我的数据主目录中使用“scripts/test/main2”、“/scripts/test/main2”或“whateverIWant/main2”,它奇怪地总是寻找“scripts/main2.js”

请注意,我使用的是 requirejs 2.1.8

4

2 回答 2

11

这不符合您的要求,因为您在设置 baseURL 之前使用 data-main 调用 require 。我不确定它为什么要尝试进入 scripts/main2.js;我希望它尝试加载 test/main2.js 而不是 scripts/main2.js。然而,这无关紧要。

您需要做的是确保您的 baseURL 在尝试加载您的 data-main 之前可用。这可以通过首先包含您的配置并使用此处第二个示例中的语法来完成: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"
};
于 2013-10-30T17:33:43.157 回答
7

我读了这个线程并且不太明白为什么使用 data-main 属性指向配置 js 文件与在加载 Require 之前指定配置不同,正如这个线程的答案所暗示的那样。

在我的实验中,我了解到使用 data-main config js 文件设置值可能有效(同样,它可能无效)。对于那些刚接触 Require 和 AMD 以及一般的异步性的人来说,“可能有效”的概念与异步操作在可以运行时运行的事实有关——而不是以任何可预测的顺序运行。

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

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

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

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

于 2014-06-12T10:49:22.853 回答