2016-06-30 15 views
0

Ich habe ein großes Problem mit RequireJS. Ich habe ein Plugin geschrieben und das Plugin funktioniert gut. Es verwendet define nicht darin. Wenn ich requirejs(["myplugin!path..."]... verwenden funktioniert es perfekt:Requirejs Plugin funktioniert nicht mit Shim/Deps/Pfade

requirejs.config({ 
    baseUrl: "/", 
    paths: { 
     "myplugin" : "path to plugin code ..." 
    } 
}); 
requirejs(["myplugin!path..."], function (something) { 
    //works perfectly 
}); 

Also, wo ist das Problem? Das Problem ist, wenn ich versuche, requirejs Konfiguration verwendet werden, wie:

requirejs.config({ 
    baseUrl: "/", 
    paths: { 
     "myplugin" : "path to plugin code ...", 
     "loadWithPlugin": "myplugin!path..." 
    } 
}); 
requirejs(["loadWithPlugin"], function (something) { 
    //Ignores the plugin totaly... 
}); 

Auf diese Weise können RequireJS ignoriert das Plugin. Was bedeutet, dass ich es nicht mit shim und deps noch map für verschiedene Versionen usw. Wie

verwenden kann ich dieses Problem beheben?

Antwort

0

Die Syntax plugin!module ist sinnvoll als Modulname. Die paths Einstellung ordnet jedoch Modulnamen Pfade zu, und ein Pfad ist kein Modulname. Also, wenn Sie es als Wert in paths setzen, wird der Text vor der ! nicht als ein Plugin interpretiert werden.

Sie können stattdessen map verwenden. Es ordnet Modulnamen den Modulnamen zu. Beispiel, das foo resolve muss myPlugin!moduleA:

require.config({ 
    baseUrl: "js", 
    paths: { 
     myPlugin: "lib/myPlugin", 
    }, 
    map: { 
     "*": { 
     foo: "myPlugin!moduleA", 
     }, 
    } 
    }); 

    require(["foo"], function (q) { 
    console.log("Q"); 
    }); 
+0

1. Es ist nicht, wie Sie vorgeschlagen arbeiten. Es akzeptiert das Plugin! nur in direkter URL. Ich denke, es nimmt die Luft aus dem Plugin Ballon, wenn Sie es nur so verwenden können. –

+0

Es funktioniert wie ich vorgeschlagen habe. Ich habe den Code vollständig getestet, bevor ich hier gepostet habe. – Louis

+0

OK, es funktionierte nicht mit map, weil ich Version 2.0.2 anstelle von 2.2.0 verwendet habe. Trotzdem danke, –