2012-02-29 23 views
294

He estado jugando con requirejs durante los últimos días. Estoy tratando de entender las diferencias entre definir y requerir.¿Cuándo debería usar require() y cuándo usar define()?

Definir parece permitir la separación de módulos y permitir que se cumpla el orden de dependencia. Pero descarga todos los archivos que necesita para empezar. Mientras que solo requiere cargar lo que necesita cuando lo necesita.

¿Se pueden usar estos dos juntos y para qué fines se deben usar?

Respuesta

314

Con define registra un módulo en require.js del que puede depender en otras definiciones de módulo o requerir instrucciones. Con require "solo" carga/usa un módulo o archivo JavaScript que puede ser cargado por require.js. Para ejemplos echar un vistazo a la documentation

Mi regla de oro:

  • definir: Si desea declarar un módulo de otras partes de su aplicación dependerán.

  • Requiere: Si solo quiere cargar y usar cosas.

319

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í.

+1

¿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

+0

¿Por qué esta respuesta es tan diferente a lo que leo aquí http://requirejs.org/docs/api.html#deffunc ?? –

+1

@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

1

"definir" método para facilitar la definición de módulo y "requieren" método para manejar la carga de dependencia

definen se utiliza para definir el nombre o módulos no identificados sobre la base de la propuesta con la siguiente firma:

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

requerir, por otro lado, normalmente se usa para cargar código en un archivo JavaScript de nivel superior o dentro de un módulo si desea buscar dinámicamente dependencias

Consulte https://addyosmani.com/writing-modular-js/ para obtener más información.

1

require() y define() ambos utilizados para cargar dependencias. Existe una gran diferencia entre estos dos métodos.

Sus chicos muy simple

require(): método se utiliza para ejecutar las funciones inmediatas. define(): el método se usa para definir módulos para su uso en múltiples ubicaciones (reutilización).

Cuestiones relacionadas