什么时候应该使用require(),什么时候使用define()?

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

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

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

95188 次浏览
使用define你可以在require.js中注册一个模块,然后你可以在其他模块定义或require语句中依赖它。 使用require,你“只是”加载/使用一个模块或javascript文件,可以通过require.js加载。 例如,可以查看文档

我的经验法则是:

  • 定义:如果你想声明一个模块,应用程序的其他部分将依赖于它。

  • 需要:如果你只是想加载和使用东西。

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的字符串和所需模块的数组)和一个必选参数(工厂方法)。

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

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

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

使用require(),你会说类似"我传递的函数有以下依赖项,在运行之前检查这些依赖项是否已加载"的东西。

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

"define"方法,方便模块定义 而且

.

.

.

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

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

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

更多信息请参考https://addyosmani.com/writing-modular-js/

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

很简单的家伙

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

一般规则:

  1. 当您希望定义一个将被重用的模块时,可以使用define

  2. 你使用require只是加载一个依赖项

    //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
    });
    

Hope this helps you.