De los require.js source code (línea 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.
*/
La función define()
acepta dos parámetros opcionales (una cadena que representa un ID de módulo y una serie de módulos necesarios) y un parámetro requerido (un método de fábrica).
La devolución del método de fábrica DEBE devolver la implementación para su módulo (de la misma manera que lo hace el Module Pattern).
La función require()
no tiene que devolver la implementación de un nuevo módulo.
Usando define()
que está pidiendo algo así como "ejecutar la función que estoy pasando como un parámetro y asignar lo regresa a la identificación que estoy pasando, pero, antes, comprobar que estas dependencias son cargados".
Usando require()
que está diciendo algo así como "la función que pasar tiene las siguientes dependencias, compruebe que estas dependencias se cargan antes de ejecutarlo".
La función require()
es donde usa los módulos definidos, para asegurarse de que los módulos estén definidos, pero no está definiendo nuevos módulos allí.
¿Existe alguna diferencia en cuanto a si require se usa dentro de un módulo definido o fuera de él? Si se usa dentro de un módulo, ¿por qué no simplemente establecer los requisitos en la definición del módulo en lugar de usar require? – Petri
¿Por qué esta respuesta es tan diferente a lo que leo aquí http://requirejs.org/docs/api.html#deffunc ?? –
@Petri, parece que está viendo el comportamiento de RequireJS versión 2 de cargar módulos de forma asíncrona. "RequireJS 2.0 no ejecutará la función de fábrica del módulo (la función pasó a' define() '), hasta que haya habido una llamada' require ([]) 'que lo haya solicitado o algo que dependa de ella." https://github.com/jrburke/requirejs/wiki/Upgrading-to-RequireJS-2.0#delayed – alxndr