【问题标题】:I don't understand how require.js handles the load paths. Do I need to use require.config every time I define a module?我不明白 require.js 如何处理加载路径。每次定义模块时都需要使用 require.config 吗?
【发布时间】:2012-08-01 02:40:43
【问题描述】:

我正在学习 require.js 并认为我只是遗漏了一些东西。我不明白它如何加载文件。

我的 jquery 文件位于 lib 目录中。

这不起作用:

它显示 jquery 正在加载到 chrome 网络面板中。错误是:Uncaught TypeError: undefined is not a function 。所以基本上是说 $ 是未定义的。

require(['lib/jquery'],function($) {
  $(document).ready(function(){
    alert('hello');
  });
});

这行得通:

require.config({
    paths: {
        jquery: 'lib/jquery'
    }
});


require(['jquery'],function($) {
      $(document).ready(function(){
      alert('hello');
    });

});

在我在网上看到的其他示例中,您不必使用 require.config 设置路径。每次我想定义一个模块时都必须这样做吗?我知道在这种情况下我使用的是require而不是define,但是我对define方法有同样的问题。每次我使用define 制作模块时,我都必须使用require.config() 设置路径。我想我在这里遗漏了一些东西。谁能指出我正确的方向?

【问题讨论】:

    标签: javascript amd


    【解决方案1】:

    这是对 jquery 完成的 AMD 注册的约束。它显式注册为名为“jquery”的命名模块,因此您必须为其配置路径,或者在上述情况下,将 baseUrl 设置为“lib”,然后您不需要路径配置。

    其他库通常应该使用匿名模块注册,因此您不需要为每个库进行路径配置。 More details here.

    另外,一些库,比如下划线,不直接调用define(),但是你可以使用shim config获得一定程度的支持。

    【讨论】:

    • 感谢您的回复。因此,据我了解,如果一个模块没有指定的模块 ID,那么它是匿名的,只需指定路径 require(['lib/this','lib/that']) 即可调用它。如果它确实有一个 id,就像 jquery 一样,那么需要首先使用 require.config 设置路径
    【解决方案2】:

    更新以反映 cmets 和 James' answer:

    你有两个问题:

    1. jQuery,出于 James 在他的回答中概述的原因,要求您在配置中设置 paths,或者在您概述的代码中,将 baseUrl 设置为“lib” .

    2. 您必须记住,您不能只使用 RequireJS 加载任何旧脚本。只能加载符合 AMD 标准的脚本。

    话虽如此,我还是建议你改用require-jquery。

    您可能最终会使用 jQuery 插件,这些插件会假定 jQuery 已加载到页面上,而这些插件不适用于您尝试的方法。

    【讨论】:

    • 是的,我读到了,但我觉得使用它感到不安,因为我不确定它从哪里获取 jquery 以及它正在抓取什么版本。我宁愿自己托管文件。另外,我正在使用其他库,主要是对如何加载路径感到困惑。我在加载 underscore.js 时遇到同样的问题
    • @SpencerCooley RequireJS 不支持开箱即用的 underscorejs。你必须记住在 RequireJS 中不能加载任意脚本。仅需要 AMD 格式的脚本。加载下划线有技巧,所以我猜你确实了解路径是如何加载的,你只是没有尝试加载可以实际加载的脚本。
    • 看起来它最后是 AMDified // AMD 定义发生在最后以与 AMD 加载器兼容 // 不对模块强制执行下一轮语义。 if (typeof define === 'function' && define.amd) { define('underscore', function() { return _; }); }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 2015-03-15
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 2013-01-21
    相关资源
    最近更新 更多