web-dev-qa-db-fra.com

Module nommé VS Module Sans nom dans ExigenceJS

Nous pouvons créer un module en exigejs en lui donnant un nom:

define("name",[dep],function(dep) {
      // module definition
});

ou nous pouvons créer un excluant le nom:

define([dep],function(dep) {
      // module definition
});

Quel est le meilleur moyen de créer un module? Je sais que nécessaire recommande d'éviter d'attribuer des noms de module.

Mais je veux savoir dans quels scénarios nous faisons et ne pas avoir à donner un nom de module. Cela affecte-t-il l'utilisation? Quels sont les avantages et les inconvénients de chaque passage?

37
Aniket

C'est ce que l'exigence Documentation dit sur le sujet des modules nommés:

Celles-ci sont normalement générées par l'outil d'optimisation. Vous pouvez explicitement nommer des modules vous-même, mais cela rend les modules moins portables - si vous déplacez le fichier dans un autre répertoire, vous devez modifier le nom. Il est normalement préférable d'éviter de coder dans un nom pour le module et de laisser simplement l'outil d'optimisation brûler dans les noms de module. L'outil d'optimisation doit ajouter les noms de manière à ce que plusieurs module puissent être fournis dans un fichier pour permettre un chargement plus rapide dans le navigateur.

Mais disons-vous veux Votre module d'avoir un seul nom bien connu qui permet toujours de le répondre de la même manière à partir de tout autre module. Avez-vous alors besoin d'utiliser l'appel define avec un nom? Pas du tout. Vous pouvez utiliser paths dans votre configuration:

paths: {
   'jquery': 'external/jquery-1.9.1',
   'bootstrap': 'external/bootstrap/js/bootstrap.min',
   'log4javascript': 'external/log4javascript',
   'jquery.bootstrap-growl': 'external/jquery.bootstrap-growl',
   'font-awesome': 'external/font-awesome'
},

Avec cette configuration, JQuery peut être requis comme "jquery", Twitter Bootstrap comme "bootstrap", etc. La meilleure pratique est de laisser appeler define avec un nom sur optimiseur .

19
Louis

En haut de ma tête, le seul module que j'ai vu qui utilise la méthode du module nommé est JQuery. Personnellement, je recommanderais également d'utiliser le motif de module non nommé.

Modules nommés

En nommant un module, le nom utilisé pour exiger est indépendant de son emplacement. Un autre auteur de module pourrait avoir aveuglément besoin de "jQuery", sans connaître le chemin des modules. Ceci est utile si vous développez un module réutilisable (en dehors de votre projet). Cependant, il a l'inconvénient (en utilisant JQuery comme exemple), vous auriez besoin d'ajouter et d'entrer dans la propriété paths config pour que requiert doit indiquer sur l'emplacement correct du fichier. Sinon requis peut trouver le fichier à charger, sauf si elle est placée dans votre base nécessite un répertoire.

Modules Sans nom

Je trouve que celles-ci sont préférables car vous pouvez profiter des chemins requis relatifs. Disons que vous avez deux fichiers modules/ClassA et modules/ClassB. ClassB peut nécessiter ClassA utiliser './ClassA', et l'ensemble du répertoire peut être déplacé si nécessaire. En utilisant un module Sans nom, vous éliminez également la possibilité d'une collision de nommage, sauf si vous parvenez à trouver un moyen de placer deux fichiers dans le même répertoire, avec le même nom.

11
redmallard