2

晚上好,

我是 requireJs 的新手,希望我的问题不是愚蠢的,这是我的第一个 :)。

  1. 为什么这家伙在上面的代码中使用 require 和 requirejs,有什么区别?

        要求([“配置”],功能(配置){
            需要js.config(配置);
            要求([“应用程序”,“余烬”],函数(应用程序,余烬){
                var app_name = config.app_name || “应用程序”;
                root[app_name] = App = Ember.Application.create(App);
                App.deferUntilDOMReady();
            });
        });
    1. 不同的代码拼写有区别吗?
    2. 在这两种情况下,脚本资源是异步加载还是同步加载?
    3. 如果我使用 requirejs-jquery 是 jquery($)而不是全局范围还是仅本地范围(amd 范围)?
        要求(['script1','script2'],函数(){}
        要求(功能(要求){
          要求('script1');
          要求('script2');
    }
  2. 是否可以有多个需要配置?例如,我有一堆嵌套结构,例如 /modules/helper/example/js/example。目前我有所有需要的垫片,在 main.js 配置中。我想放置一个 main.js 或配置。

比我不再需要在主目录中放置所有配置和路径。

4

1 回答 1

3

1.1 RequireJS 在全局范围内注册了自己的两个实例——require而且requirejs——实际上只是出于一个原因——如果一个(很可能)被另一个范围或实现不同的实例require覆盖,你仍然拥有——通常总是一个全局的。当您计划使用与您现在所在的模块相关的资源时,这种分离很重要。requirerequirejs

// contents of 'a/b/c.js' module file
define(['require'], function(require){

    // "local scope" require call
    // resolves to 'a/b/d.js' file
    require(['./d'], function(d){})

    // "global scope" require call
    // resolves to 'd.js' file
    requirejs(['./d'], function(d){})
})

请注意,请求 local require 仅在定义调用中才有意义。因为define调用是建立“模块”和它的 ID。以上等价于这个命名定义:

// contents of whatever file
define('a/b/c', ['require'], function(require){

    // "local scope" require call
    // resolves to 'a/b/d.js' file
    require(['./d'], function(d){})

    // "global scope" require call
    // resolves to 'd.js' file
    requirejs(['./d'], function(d){})
})

James 放在那里的另一个秘密原因requirejs是强迫您继续require在本地范围内使用,因为他的构建工具会查找该特定字符串require以查找 require 调用。你这样做,r.js突然不能跟随你的依赖树,因为myLocalRequire不是r.js预期的:

// contents of 'a/b/c.js' module file
define(['require'], function(myLocalRequire){

    // "local scope" require call
    // resolves to 'a/b/d.js' file
    myLocalRequire(['./d'], function(d){})

    // "global scope" require call
    // resolves to 'd.js' file
    require(['./d'], function(d){})
})

1.2 RequireJS 根本不做同步加载。唯一你认为“必须同步!”的地方 - CommonJS 风格var a = require('a')的调用就像它仍然不是一样。它将资源从缓存中拉出。换句话说,它从不同步加载任何东西。

1.3 不要使用捆绑的RequireJS+jQuery。它使已经很大的 jQuery 变得更大,并干扰浏览器缓存。(而不是使用来自 CDN 的缓存 jQuery,您强制用户再次下载相同的 jQuery - 100k 垃圾)。

请参阅:Use jQuery as a dependency without loading jQuery with RequireJS?

2.0 不要。单独的配置是一个陷阱。一旦你开始“构建”你的应用程序,你就会心甘情愿地进入地狱。我敢于给我一个单独的健全配置的示例,我无法将其表示为命名定义组或主模块加载相关资源的“包”。

唯一必须在 RequireJS 配置中的是“baseUrl”和 2-5 个全局使用的“路径”定义。而已。

于 2013-02-15T18:31:52.297 回答