在过去的几天里,我一直在摆弄需求。我试图理解define和require之间的区别。

Define似乎允许模块分离,并允许遵循依赖顺序。但是它会下载所有需要的文件。而require只在你需要的时候装载你需要的东西。

这两者可以一起使用吗?它们各自应该用于什么目的?


当前回答

require.js源代码(第1902行):

/**
 * The function that handles definitions of modules. Differs from
 * require() in that a string for the module should be the first argument,
 * and the function to execute after dependencies are loaded should
 * return a value to define the module corresponding to the first argument's
 * name.
 */

define()函数接受两个可选参数(表示模块ID的字符串和必需模块的数组)和一个必需参数(工厂方法)。

factory方法的返回必须返回模块的实现(与模块模式的方式相同)。

require()函数不一定要返回新模块的实现。

使用define(),你会问一些类似于“运行我作为参数传递的函数,并将任何返回值赋给我传递的ID,但在此之前,检查这些依赖项是否加载”的问题。

使用require(),你可以说“我传递的函数具有以下依赖项,在运行它之前检查这些依赖项是否已加载”。

require()函数是您使用已定义模块的地方,以确保模块已定义,但您没有在那里定义新模块。

其他回答

Require()和define()都用于加载依赖项。这两种方法有一个主要的区别。

很简单的家伙

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

require.js源代码(第1902行):

/**
 * The function that handles definitions of modules. Differs from
 * require() in that a string for the module should be the first argument,
 * and the function to execute after dependencies are loaded should
 * return a value to define the module corresponding to the first argument's
 * name.
 */

define()函数接受两个可选参数(表示模块ID的字符串和必需模块的数组)和一个必需参数(工厂方法)。

factory方法的返回必须返回模块的实现(与模块模式的方式相同)。

require()函数不一定要返回新模块的实现。

使用define(),你会问一些类似于“运行我作为参数传递的函数,并将任何返回值赋给我传递的ID,但在此之前,检查这些依赖项是否加载”的问题。

使用require(),你可以说“我传递的函数具有以下依赖项,在运行它之前检查这些依赖项是否已加载”。

require()函数是您使用已定义模块的地方,以确保模块已定义,但您没有在那里定义新模块。

“define”方法,方便模块定义 而且 “require”方法处理依赖项加载

Define用于根据建议定义命名或未命名模块,使用以下签名:

define(
module_id /*optional*/, 
[dependencies] /*optional*/, 
definition function /*function for instantiating the module or object*/
);

另一方面,require通常用于在顶级JavaScript文件中加载代码,或者在您希望动态获取依赖项的模块中加载代码

更多信息请访问https://addyosmani.com/writing-modular-js/。

一般规则:

You use define when you want to define a module that will be reused You use require to simply load a dependency //sample1.js file : module definition define(function() { var sample1 = {}; //do your stuff return sample1; }); //sample2.js file : module definition and also has a dependency on jQuery and sample1.js define(['jquery', 'sample1'], function($,sample1) { var sample2 = { getSample1:sample1.getSomeData(); }; var selectSomeElement = $('#someElementId'); //do your stuff.... return sample2; }); //calling in any file (mainly in entry file) require(['sample2'], function(sample2) { // sample1 will be loaded also });

希望这对你有所帮助。

通过define,你可以在require.js中注册一个模块,然后你可以在其他模块定义或require语句中依赖它。 使用require,你“只是”加载/使用一个模块或javascript文件,可以通过require.js加载。 有关示例,请参阅文档

我的经验法则是:

定义:如果你想声明一个模块,应用程序的其他部分将依赖于它。 需要:如果你只是想加载和使用东西。