在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
});
有任何使用案例将非常有帮助。
在早期使用中令我感到困惑的一个核心区别是弄清楚 define
可能永远不会被调用。
只要每个文件中只有一个 define
,它就会将该模块注册为在该文件名下可用。然而,define
模块只有在一个 require
函数请求时才加载。
定义:如果您需要一个 XXX,则首先加载其他内容,然后返回此函数的结果。
需要:加载其他内容,然后运行此函数(没有“if”)。
示例:假设您将此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并意识到需要它。
<script src="require.js"></script><script src="company/welcomepage.js"></script>
,则会出现Uncaught Error: Mismatched anonymous define() module: function (uiLib) { console.log('Welcome to {company}!'); }
。如果我的HTML代码为<script data-main="company/welcomepage.js" src="require.js"></script>
,则可以看到控制台消息。您能否提供一个完整的示例? - Don Hatchdata-main
)中,这明确要求该文件,因此它决定运行它。 - Katana314require
和requirejs
是一样的。
require === requirejs // true
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);
}
}
});
define(id?, dependencies?, factory);
如果没有指定模块名称(即 id
参数),则模块名称为其文件位置。 - Advenadefine(function (require) {
var otherModule = require('otherModule');
return function () {
return otherModule.operation();
};
});
define 是我们声明模块的方式,符合 AMD 模块格式(还有其他可用的模块格式,如 CommonJS、ES2015、System.register、UMD)。
而 ..
require 是一个模块加载构造,可在像 RequireJs、SystemJS、Node 的内置模块加载器等模块加载器中使用。当您想要使用上述任一模块格式中定义的模块时,就可以使用它。
require()和define()都用于加载依赖项。这两种方法之间有一个重大的区别。
非常简单
Require(): 方法用于运行即时功能。 define(): 方法用于定义可在多个位置(重复使用)中使用的模块。