Si j'ai un module non-AMD nommé old.js
et à l'intérieur de ce script, j'ai deux fonctions f1
et f2
définies. Je dois les utiliser, comment puis-je exporter les deux?
require.config({ paths: { "jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min", }, shim: { "old": { deps: ["jquery"], exports: ["f1", "f2"] } }, urlArgs: "bust=" + (new Date()).getTime() });
Cela ne fonctionnerait pas. Je vais obtenir une erreur split
. Le document ne mentionne pas plusieurs ( http://requirejs.org/docs/api.html#config-shim ). Je suppose que même si ces exemples de jquery sont des fichiers individuels et qu'ils ont une fonction / classe "entrée".
Généralement, si vous souhaitez exporter plus d'un objet à partir d'un module, vous avez toujours besoin d'exporter un seul objet. Le formulaire standard est de joindre vos fonctions à un objet d'exportation et de le renvoyer:
function f1() { ... } function f2() { ... } return { f1: f1, f2: f2 };
S'il s'agit d'un code non-AMD, vous pourriez ne pas avoir l'instruction de return
, mais vous devriez encore ajouter l'objet d'exportation.
Il semble que l' option recommandée pour l'ancien code est de ne spécifier que f1
dans la propriété des exports
, mais encore plus dans la fonction init
. Il est vraisemblablement nécessaire d'utiliser la propriété des exports
pour vérifier que le fichier a été chargé, donc peu importe si vous incluez tous les éléments. En supposant que f1
et f2
sont les deux globales, vous pourriez probablement le faire:
shim: { "old": { deps: ["jquery"], exports: "f1", init: function() { return { f1: f1, f2: f2 }; } } }
Cela devrait vous permettre d'exiger de l' old
et d'obtenir l'objet export plutôt que f1
:
require(['old'], function(old) { old.f1(); old.f2(); });