在 RequireJS 中,使用 require() 与 define() 的基本区别是什么?
require(['a'], function(a) {
// some code
});
// A.js
define(['b','c','d','e'], function() {
//some code
});
任何用例都会非常有帮助..
在 RequireJS 中,使用 require() 与 define() 的基本区别是什么?
require(['a'], function(a) {
// some code
});
// A.js
define(['b','c','d','e'], function() {
//some code
});
任何用例都会非常有帮助..
在早期使用时让我烦恼的一个核心区别是弄清楚 adefine
可能永远不会被调用。
只要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>
标签了;一旦它看到需求,它就会从它的位置加载它,并意识到它需要它。
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
模块。在这个模块中,我返回了bla
我想要公开的函数。
有时define 看起来与exports 非常相似,因为define 也可以依赖和使用其他模块,就像require 可以使用其他模块一样。让我向您展示相同的logger
模块,这次使用模块
// logger.js
define(["popup"], function(popup){
return {
bla: function(x){
popup.show(x);
}
}
});
这里的记录器模块 Idefined
也有一个名为的依赖项popup
,因此它看起来像require
。
我相信您总是将 define 用于您的模块定义。您有多种方式可以这样做,您可以在数组中定义一个模块及其依赖项作为第一个参数来定义(如您发布的示例中所示)。
或者您可以使用简化的 CommonJS 包装器,如下所示:
define(function (require) {
var otherModule = require('otherModule');
return function () {
return otherModule.operation();
};
});
也许你混淆了JSONP 服务依赖格式,它使用 require() 来加载服务,然后将 define() 指定为 JSONP 回调,一旦服务响应,它将最终定义模块。
所以最后,你使用 define() 来定义模块,并使用 require() 来加载它们。
define是我们如何声明一个模块,根据AMD模块格式(还有其他可用的模块格式,如CommonJS,ES2015,System.register,UMD)
然而 ..
require是一个模块加载结构,可用于RequireJs、SystemJS、Node 的内置模块加载器等模块加载器。当您想要使用以上述模块格式之一定义的模块时使用它。
require()和define()都是用来加载依赖的。这两种方法有一个主要的区别。
非常简单的家伙
Require():方法用于运行即时功能。 define():方法用于定义在多个位置使用的模块(重用)。