我何时应该使用require()以及何时使用define()?

ski*_*t51 310 require requirejs

过去几天我一直在玩requirejs.我试图理解define和require之间的区别.

定义似乎允许模块分离并允许遵守依赖性排序.但它会下载所需的所有文件.虽然只需要在您需要时加载您需要的东西.

这两者可以一起使用,是否应该使用它们?

Rob*_*ert 329

从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.
 */
Run Code Online (Sandbox Code Playgroud)

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

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

require()函数不必返回新模块的实现.

使用define()你问的问题是"运行我作为参数传递的函数并将任何返回值分配给我传递的ID,但之前检查这些依赖项是否已加载".

使用require()你说的是"我传递的函数具有以下依赖关系,检查这些依赖关系在运行之前是否已加载".

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

  • 是否在define'd模块内或在其外部使用require是否有任何区别?如果在模块内使用它,为什么不在模块定义中设置需求而不是使用require? (2认同)
  • @Petri,听起来你正在看到RequireJS的异步加载模块的第2版行为."RequireJS 2.0不会执行模块的工厂函数(传递给`define()`的函数),直到有一个`require([])`调用已经要求它,或者依赖它的东西." https://github.com/jrburke/requirejs/wiki/Upgrading-to-RequireJS-2.0#delayed (2认同)

wis*_*han 326

随着define您注册在require.js,然后可以在其他模块定义依赖或需要声明的模块.随着require你"只"加载/使用可以由require.js加载的模块或javascript文件.有关示例,请查看文档

我的经验法则:

  • 定义:如果要声明模块,应用程序的其他部分将依赖于.

  • 要求:如果您只想加载和使用东西.