15

使用 requirejs 我的 main.js 看起来像这样

requirejs.config({
    baseUrl: '/javascript/',
    paths: {
        jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min',
        async: 'requirePlugins/async',
            hbs: 'hbs'
    },
    waitSeconds: 7
});
define(['common'], function () {
    loadFonts();
});

main.js 通过脚本调用包含在页面中

<script data-main="/javascript/main.js" src="/javascript/require-2.0.1.js"></script>

Common 是网站的基本功能,jquery doc ready 功能等包装在定义调用中:

define(['jquery'], function() {
    //jQuery dependant common code
});

这很好用,从谷歌 CDN 加载 jQuery 并执行代码。但是当我在加载 main.js 之后添加一个 require 调用

<script data-main="/javascript/main.js" src="/javascript/require-2.0.1.js"></script>
require(['jquery'], function ($) {
    //code
});

jquery 是从 /javascript/jquery.js 请求的,而不是谷歌 cdn 的定义路径。我仍然是 requirejs 的新手,但在我看来,应该在触发任何其他请求之前定义路径,有人可以帮我理解我做错了什么吗?

4

6 回答 6

7

我认为这可能是由于data-main在 RequireJS 脚本标签上使用了该属性;要解析它,RequireJS 本身必须加载和解析。data-main在我的测试中(特别是针对 IE9),浏览器会在解析 RequireJS 配置文件(由属性指定的配置文件)之前直接下载并执行 RequireJS 脚本标签之后的任何脚本标签。

为了解决这个问题,我简单地停止使用该data-main属性,而是将配置文件作为普通脚本标签直接放在 RequireJS 脚本标签之后,现在一切似乎都很开心。

具体来说,这就是它的样子(使用您的示例):

<script src="/javascript/require-2.0.1.js"></script>
<script src="/javascript/main.js"></script>
于 2012-10-15T20:56:20.803 回答
5

也许你在加载 require js 之前放置了 config 语句。

您应该先加载 require.js,然后将配置代码放在后面,然后调用 require(['jquery'], ...);

它搜索 /javascript/ 的原因是因为您的 require.js 文件位于那里,并且它是默认的基本 url。

你的配置可能永远不会被 require.js 使用。

请参阅有关要求配置的本教程。

于 2012-06-05T10:58:25.297 回答
0

您必须重命名定义为要求

require(['common'], function () {
    loadFonts();
});
于 2014-02-13T06:28:56.200 回答
0

我建议使用map而不是paths配置特定的模块位置。

paths更多用于简化/配置包含的快捷方式/前缀,而不是完整的模块路径。

请记住:您需要将要全局应用的映射*放在对象中的星号 ( ) 键下map

于 2014-10-07T14:10:04.677 回答
0

原因是您require(['jquery']...在加载 require.js 模块后立即放置。结果,它会['jquery']在读取您的配置设置之前尝试加载。

为什么它试图在其中找到 jquery /javascript/jquery.js?那是因为你的data-main属性。

RequireJS 加载所有与 baseUrl 相关的代码。baseUrl 通常设置为与用于为页面加载的顶级脚本的 data-main 属性中的脚本相同的目录。

此链接阐明了 require.js 模块加载过程: http ://requirejs.org/docs/api.html#jsfiles

于 2015-11-25T19:40:49.987 回答
-2

我认为您可以将完整的 url 嵌入到 require 块中。喜欢:

require(['http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min'], function ($) {
   //code
});

顺便说一句,您的 jquery 链接无效。

于 2012-06-05T10:06:27.117 回答