Question

Je joue avec les obligations au cours des derniers jours. J'essaie de comprendre les différences entre définir et exiger.

Définir semble permettre la séparation des modules et permettre à l'ordre de dépendance d'être adhéré. Mais il télécharge tous les fichiers dont il a besoin pour commencer. Bien que nécessite seulement de charger ce dont vous avez besoin lorsque vous en avez besoin.

Ces deux-là peuvent-ils être utilisés ensemble et à quels fins d'eux devraient-ils être utilisés?

Était-ce utile?

La solution

Avec define Vous enregistrez un module dans require.js dont vous pouvez ensuite dépendre dans d'autres définitions de modules ou des instructions requises. Avec require Vous "chargez" "utilisez simplement un module ou un fichier JavaScript qui peut être chargé par require.js. Pour les exemples, jetez un œil au Documentation

Ma règle d'or:

  • Définissez: Si vous souhaitez déclarer un module, d'autres parties de votre application dépendront.

  • Exiger: si vous voulez juste charger et utiliser des choses.

Autres conseils

De la require.js code source (Ligne 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() La fonction accepte deux paramètres facultatifs (une chaîne qui représente un ID de module et un tableau de modules requis) et un paramètre requis (une méthode d'usine).

Le retour de la méthode d'usine DEVOIR Renvoyez l'implémentation de votre module (de la même manière que le Modèle de module Est-ce que).

La require() La fonction n'a pas à renvoyer l'implémentation d'un nouveau module.

Utilisant define() Vous demandez quelque chose comme "Exécutez la fonction que je passe en tant que paramètre et attribuez tout ce qui renvoie à l'ID que je passe mais, avant, vérifiez que ces dépendances sont chargées".

Utilisant require() Tu dis quelque chose comme "La fonction que je passe a les dépendances suivantes, vérifiez que ces dépendances sont chargées avant de l'exécuter".

La require() La fonction est l'endroit où vous utilisez vos modules définis, afin de vous assurer que les modules sont définis, mais vous n'y définissez pas de nouveaux modules.

Méthode "Définir" pour faciliter la définition du module et "exiger" la méthode pour gérer le chargement de dépendance

Définir est utilisé pour définir des modules nommés ou sans nom en fonction de la proposition en utilisant la signature suivante:

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

En revanche, l'exigence est généralement utilisée pour charger du code dans un fichier JavaScript de niveau supérieur ou dans un module si vous souhaitez récupérer dynamiquement les dépendances

Faire référence à https://addyosmani.com/writing-modular-js/ pour plus d'informations.

require () et définir () les deux utilisés pour charger les dépendances. Il y a une différence majeure entre ces deux méthode.

Ses gars très simples

Require (): la méthode est utilisée pour exécuter des fonctionnalités immédiates. Define (): la méthode est utilisée pour définir des modules à utiliser à plusieurs emplacements (réutilisation).

Règles générales:

  1. Vous utilisez définir lorsque vous souhaitez définir un module qui sera réutilisé

  2. Vous utilisez nécessaire pour charger simplement une dépendance

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

J'espère que cela vous aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top