¿Cuándo debo usar require() y cuándo usar define()?

Resuelto skinnybrit51 asked hace 12 años • 5 respuestas

He estado jugando con requirejs durante los últimos días. Estoy tratando de entender las diferencias entre definir y requerir.

Definir parece permitir la separación de módulos y permitir que se respete el orden de dependencia. Pero para empezar, descarga todos los archivos que necesita. Mientras que require solo carga lo que necesitas cuando lo necesitas.

¿Se pueden utilizar estos dos juntos y para qué se debe utilizar cada uno de ellos?

skinnybrit51 avatar Mar 01 '12 05:03 skinnybrit51
Aceptado

Con defineusted registra un módulo en require.js del que luego puede depender en otras definiciones de módulos o declaraciones requeridas. Con requireusted "simplemente" cargue/use un módulo o archivo javascript que pueda cargarse mediante require.js. Para ver ejemplos, consulte la documentación.

Mi regla general:

  • Definir: si desea declarar un módulo, otras partes de su aplicación dependerán de él.

  • Requerir: si solo desea cargar y usar cosas.

wischan avatar Mar 01 '2012 12:03 wischan

Del código fuente de require.js (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 define()función acepta dos parámetros opcionales (una cadena que representa un ID de módulo y una matriz de módulos requeridos) y un parámetro requerido (un método de fábrica).

El retorno del método de fábrica DEBE devolver la implementación de su módulo (de la misma manera que lo hace el Patrón del Módulo ).

Elrequire() función no tiene que devolver la implementación de un nuevo módulo.

Al usarlo, define()estás preguntando algo como "ejecutar la función que estoy pasando como parámetro y asignar los retornos al ID que estoy pasando pero, antes, verifique que estas dependencias estén cargadas" .

Al usarlo require()estás diciendo algo como "la función que paso tiene las siguientes dependencias, verifica que estas dependencias estén cargadas antes de ejecutarla" .

La require()función es donde usa sus módulos definidos, para asegurarse de que los módulos estén definidos, pero no está definiendo nuevos módulos allí.

Robert avatar Jun 12 '2012 09:06 Robert

Reglas generales:

  1. Se utiliza definir cuando se quiere definir un módulo que será reutilizado.

  2. Usas require para simplemente cargar una dependencia

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

Espero que esto te ayude.

Humayoun_Kabir avatar Aug 23 '2019 13:08 Humayoun_Kabir

Método "definir" para facilitar la definición del módulo y método "requerir" para manejar la carga de dependencias

define se utiliza para definir módulos con o sin nombre según la propuesta utilizando la siguiente firma:

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

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

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

refactor avatar Mar 21 '2016 07:03 refactor