RequireJS:require()和define()之间的区别

时间:2013-08-30 14:05:55

标签: javascript requirejs amd

在RequireJS中,使用require()Vs define();

之间的基本区别是什么
require(['a'], function(a) {
    // some code
});

// A.js
define(['b','c','d','e'], function() {
    //some code
});

任何用例都会非常有用..

5 个答案:

答案 0 :(得分:48)

在早期使用中让我烦恼的一个核心差异是弄清楚define 可能永远不会被称为

只要每个文件只有一个define,它就会在该文件名下注册该模块。但是,define模块仅在require函数请求每个模块时加载。

定义:如果您需要XXX,请先加载其他内容,然后返回此函数的结果。

要求:加载其他内容,然后运行此功能。 (没有“如果”)

示例:假设您在页面中包含此JS文件:

// this is in company/welcomepage.js
define(['company/ui_library'],
    function(uiLib) {
        console.log('Welcome to {company}!');
    }
);

如果这是唯一的Javascript文件,您可以打开您的页面,并且控制台日志中没有任何内容,尽管脚本告诉它欢迎用户。但是,如果在页面中的某个位置或其他脚本中进行更改,则会插入以下内容:

require(['company/welcomepage'], function() {
    // optionally insert some other page-initialization logic here
});

现在,该页面将在加载时在控制台中显示欢迎消息。

事实上,有了第二个,就不需要手动将welcomepage.js包含为<script>标签;它会在看到需求后立即从其位置加载它,并意识到它需要它。

答案 1 :(得分:17)

QWE(8)=(1.+5.*HILF+RWS(6)*(2*((RWS(6)**2-1)/(HILF1)-RWS(6)-HILF1) 1 0 1 2 1 2 34 5 4 3 4 3 4 3 2 require是相同的。

requirejs

require === requirejs // true 是一种加载已定义模块的方法。例如,要加载我可以执行的require模块:

logger

我在这里调用require(["logger"], function(logger){ logger.bla("S"); }); ,指定一个名为require的已定义模块,并通过调用其logger方法来使用它。

bla是一种定义模块的方法。例如,要定义我可以执行的define模块:

logger

我在这里打电话给// logger.js define(function(){ return { bla: function(x){ alert(x); } } }); 并定义了define模块。在这个模块中,我返回了我想要公开的logger函数。

有时,define看起来与export非常相似,因为define也可以依赖并使用其他模块,就像require可以使用其他模块一样。让我向您展示相同的bla模块,这次使用模块

logger

此处记录器模块I // logger.js define(["popup"], function(popup){ return { bla: function(x){ popup.show(x); } } }); 也有一个名为defined的依赖项,因此它看起来像popup

答案 2 :(得分:1)

我相信你总是使用define来模块定义。您有多种方法可以这样做,您可以在数组中定义一个具有依赖关系的模块作为要定义的第一个参数(如您发布的示例中所示)。

或者您可以使用Simplified CommonJS wrapper,如下所示:

define(function (require) {
    var otherModule = require('otherModule');
    return function () {
        return otherModule.operation();
    };
});

也许你混淆了JSONP service dependency格式,它使用require()加载服务,然后指定define()作为JSONP回调,一旦服务响应,它将最终定义模块。

最后,您使用define()来定义模块,并使用require()来加载它们。

答案 3 :(得分:-2)

define 是我们按照 AMD 模块格式声明模块的方式(还有其他可用的模块格式,如 CommonJS ES2015 System.register UMD

而.. ..

require 是一个模块加载构造,可用于 RequireJs SystemJS Node 构建的模块加载器在模块加载器中。当您想要使用以上述模块格式之一定义的模块时,可以使用它。

答案 4 :(得分:-3)

require() define()都用于加载依赖项。这两种方法之间存在重大差异。

非常简单的家伙

Require():方法用于运行直接功能。 define():方法用于定义在多个位置使用的模块(重用)。