在过去的几天里,我一直在摆弄需求。我试图理解define和require之间的区别。
Define似乎允许模块分离,并允许遵循依赖顺序。但是它会下载所有需要的文件。而require只在你需要的时候装载你需要的东西。
这两者可以一起使用吗?它们各自应该用于什么目的?
在过去的几天里,我一直在摆弄需求。我试图理解define和require之间的区别。
Define似乎允许模块分离,并允许遵循依赖顺序。但是它会下载所有需要的文件。而require只在你需要的时候装载你需要的东西。
这两者可以一起使用吗?它们各自应该用于什么目的?
当前回答
Require()和define()都用于加载依赖项。这两种方法有一个主要的区别。
很简单的家伙
Require():方法用于运行即时功能。 define():方法用于定义在多个位置使用的模块(重用)。
其他回答
“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/。
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.js中注册一个模块,然后你可以在其他模块定义或require语句中依赖它。 使用require,你“只是”加载/使用一个模块或javascript文件,可以通过require.js加载。 有关示例,请参阅文档
我的经验法则是:
定义:如果你想声明一个模块,应用程序的其他部分将依赖于它。 需要:如果你只是想加载和使用东西。
Require()和define()都用于加载依赖项。这两种方法有一个主要的区别。
很简单的家伙
Require():方法用于运行即时功能。 define():方法用于定义在多个位置使用的模块(重用)。
一般规则:
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 });
希望这对你有所帮助。